2014-07-16 14 views
13

Tôi quyết định xây dựng một ứng dụng trên OSGI và Karaf - Tôi thực sự thích công cụ này. Tuy nhiên, tôi đang đấu tranh một chút với một triển khai hàng ngày trên máy phát triển địa phương của tôi. Ý tôi là .. Tôi thực hiện một sự thay đổi và sau đó tôi muốn thử nghiệm nó trên trường hợp Karaf địa phương của tôi. Và nó có thể xảy ra như vài lần mỗi giờ.Làm cách nào để làm việc với các triển khai bó chụp nhanh cục bộ thường xuyên trên Karaf?

Cách tôi đang thực hiện bây giờ là xây dựng maven tạo ra một gói JAR và sau đó nó được sao chép vào thư mục triển khai của Karaf. Tôi nghĩ rằng nó không thanh lịch chút nào.

Tôi đang cố gắng tìm đường xung quanh (google). Tôi đọc về các tính năng của Karaf nhưng có vẻ như mặc dù thực tế là nó là một cơ chế tốt để triển khai toàn bộ ứng dụng, nó không giải quyết được vấn đề của tôi. Khi tôi hiểu nó đúng, nó không kiểm tra xem phiên bản mới của lọ SNAPSHOT của tôi có xuất hiện trong repo maven địa phương của tôi không?

+0

Tại sao không chạy khung OSGi trực tiếp từ IDE của bạn? –

+0

Bạn có đề xuất khởi động khung công tác Karaf/OSGI với mỗi ứng dụng không? Hoặc triển khai bó trên Karaf bằng IDE? –

+0

Tôi đang đề xuất chạy gói trong khung công tác OSGi mỗi lần bạn cần chạy nó. Karaf là một máy chủ ứng dụng, tôi sẽ không muốn triển khai nó để phát triển. –

Trả lời

25

Chìa khóa để làm cho cơ chế cập nhật của công việc karaf là triển khai từ maven thay vì sử dụng thư mục triển khai. Install bạn bó như thế này:

install -s mvn:groupid/artifactID/version 

hoặc

install -s mvn:groupid/artifactID/version/typeOfMavenArtifact 

một lần thứ hai là hữu ích cho việc cài đặt ví dụ chiến tranh/vật wab. Bạn có thể tìm thấy đặc điểm kỹ thuật giao thức đầy đủ maven here.

Sau đó, Karaf biết vị trí của gói. Bạn cũng có thể kiểm tra điều này bằng cách sử dụng la -u. Điều này làm cho karaf hiển thị vị trí cập nhật mà bây giờ phải là một uri maven. Bạn sẽ không phải tất cả các gói karaf đều có vị trí cập nhật như thế này.

Khi bạn tạo một bản dựng mới cho dự án của mình bằng cách sử dụng maven, nó sẽ kết thúc trong kho lưu trữ maven cục bộ của bạn. Sau đó chỉ cần chạy

update <bundleid> 

Điều này làm cho karaf kiểm tra vị trí cập nhật (trong trường hợp của bạn, bạn địa phương maven repo) và tải lại bó từ đó.

Bạn thậm chí có thể tiếp tục tự động hóa điều này bằng cách sử dụng

dev:watch 

hoặc cho karaf 3+

bundle:watch 

Điều này sẽ làm karaf kiểm tra xem bạn maven repo cho những thay đổi trong bó SNAPSHOT nó đã được triển khai và tự động triển khai lại những cái này

Điều này cũng hoạt động rất tốt cùng với gỡ lỗi từ xa. Sử dụng

export KARAF_DEBUG=true 

trước khi bắt đầu karaf. Sau đó, bạn sẽ nghe một trình gỡ lỗi trên cổng 5005.

Sau đó, bạn có thể bắt đầu một phiên làm việc gỡ lỗi từ xa trên cùng một cổng và gỡ lỗi ứng dụng của bạn một cách độc đáo trong karaf. Điều này hoạt động rất tốt ngay cả khi bạn thay đổi gói của mình bằng một trong các cách tiếp cận ở trên. Vì vậy, bạn có thể gỡ lỗi, tìm sự cố, thay đổi mã, tạo và tiếp tục gỡ lỗi với phiên bản đã thay đổi.

Tôi cũng sử dụng điều này thường xuyên khi tôi làm việc tại cơ sở mã karaf chính nó vì điều này cũng làm việc cho hầu hết các gói riêng của karaf.

+0

Điều này dường như không hoạt động đối với chúng tôi trong Karaf 4.0.4. Lệnh 'update ' hoạt động _once only_ để cập nhật gói từ kho lưu trữ maven từ xa của chúng ta (Nexus). Sau đó, các lệnh cập nhật trong tương lai sẽ không làm gì cả, mặc dù chúng tôi đã chỉ định '@ snapshotUpdate = always'. Nếu chúng ta khởi động lại Karaf, thì bản cập nhật tiếp theo sẽ hoạt động (chỉ một lần). –

+0

Điều này chỉ dành cho kho lưu trữ cục bộ. Bạn biên dịch ảnh chụp cục bộ và nó sẽ được tự động cập nhật. Trường hợp sử dụng của bạn với repo từ xa là gì? –

+0

Chúng tôi có các máy chủ DEV mà chúng tôi muốn triển khai các hiện vật ảnh chụp nhanh. Trước tiên, chúng tôi xây dựng chúng bằng máy chủ CI (Bamboo) của chúng tôi, đặt chúng trong repo từ xa của Nexus. Sau đó, chúng tôi muốn triển khai chúng bằng lệnh 'bundle: update' của karaf shell. (Hoặc đôi khi sử dụng nút Cập nhật trong bảng điều khiển web karaf.) Tác vụ này hoạt động cho các tạo phẩm phát hành, nhưng đối với ảnh chụp nhanh, nó có các vấn đề tôi mô tả. –

Các vấn đề liên quan