2014-07-16 3 views
13

OSGI 및 Karaf 위에 응용 프로그램을 구축하기로 결정했습니다. 그러나, 나는 로컬 개발 기계에서 매일 배포하는 데 어려움을 겪고있다. 내 말은 .. 내가 변화를 일으킨 다음에 카라프 지역에서 테스트하고 싶다. 그리고 그것은 시간당 몇 번처럼 일어날 수 있습니다.Karaf에서 자주 로컬 스냅 샷 번들을 배포하는 방법은 무엇입니까?

내가 지금하고있는 방법은 JAR 번들을 생성하고 Karaf의 deploy 디렉토리에 복사되는 maven 빌드입니다. 나는 그것이 우아하지 않다라고 생각한다.

나는 (Google) 주변에서 길을 찾으려고했습니다. Karaf의 기능에 대해 읽었지 만 전체 앱을 배포하기에 좋은 메커니즘 임에도 불구하고 내 문제를 해결하지 못하는 것 같습니다. 내가 올바르게 이해함에 따라, SNAPSHOT 항아리의 새로운 버전이 로컬 내 레보에 나타나 있는지 확인하지 않습니다.

+0

IDE에서 직접 OSGi 프레임 워크를 실행하지 않는 이유는 무엇입니까? –

+0

각 응용 프로그램을 실행할 때 Karaf/OSGI 프레임 워크 시작을 제안 하시겠습니까? 또는 IDE를 사용하여 Karaf에서 번들 배포를할까요? –

+0

OSGi 프레임 워크를 실행할 때마다 번들을 OSGi 프레임 워크에서 실행할 것을 제안합니다. Karaf는 응용 프로그램 서버이므로 개발을 위해 배포하지 않을 것입니다. –

답변

25

karaf 작업의 업데이트 메커니즘을 만드는 핵심은 deploy 폴더를 사용하는 대신 maven에서 배포하는 것입니다. 이 같은 번들 설치 :

install -s mvn:groupid/artifactID/version 

또는

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

두 번째 예 전쟁/WAB 아티팩트 설치에 유용합니다. 전체 메이븐 프로토콜 사양은 here입니다.

그런 다음 Karaf는 번들의 출처를 알고 있습니다. la -u을 사용하여 확인할 수도 있습니다. 이것은 karaf가 지금 maven uri가되어야하는 업데이트 위치를 보여줍니다. 모든 카라프 번들에는 이와 같은 업데이트 위치가 없습니다.

이제 maven을 사용하여 프로젝트의 새 빌드를 만들면 로컬 메이븐 저장소로 끝납니다. 다음 단순히

update <bundleid> 

이 (당신 지역 받는다는의 repo 귀하의 경우) 업데이트의 위치를 ​​확인하고 거기에서 번들을 다시 karaf하게 실행합니다. 3+

bundle:watch 

이가 배포 한 당신이 스냅 번들의 변화를 REPO을 받는다는 확인하고 자동으로 재배치 karaf 것

당신은 더

dev:watch 

또는 karaf 위해를 사용하여이 작업을 자동화 할 수 있습니다 이들.

또한 원격 디버깅과 함께 매우 잘 작동합니다.

export KARAF_DEBUG=true 

을 시작하기 전에 사용하십시오. 그런 다음 포트 5005에서 디버거를 수신합니다.

그런 다음 동일한 포트에서 원격 디버그 이클립스 세션을 시작하고 karaf에서 애플리케이션을 멋지게 디버깅 할 수 있습니다. 위의 방법 중 하나를 사용하여 번들을 변경하더라도 매우 잘 작동합니다. 따라서 디버깅, 문제 찾기, 코드 변경, 변경된 버전으로 디버깅을 계속 진행할 수 있습니다.

카라프 코드베이스 자체에서 작업 할 때도 자주 사용합니다. 카라프 자체의 번들 대부분에서도 작동하기 때문입니다.

+0

이것은 Karaf 4.0.4에서 우리에게 효과가있는 것 같지 않습니다. 'update '명령은 원격 Maven 저장소 (Nexus)에서 번들을 업데이트하기 위해 _once 만 작동합니다. 그 후에, 미래의 update 명령은'@ snapshotUpdate = always'가 지정되어 있어도 아무것도하지 않습니다. Karaf를 다시 시작하면 다음 업데이트가 작동합니다 (한 번만). –

+0

이것은 로컬 저장소에만 해당됩니다. 스냅 샷을 로컬에서 컴파일하면 자동 업데이트됩니다. 원격 저장소에서 사용 사례는 무엇입니까? –

+0

우리는 스냅 샷 생성물을 배치 할 DEV 서버를 가지고 있습니다. 먼저 CI 서버 (Bamboo)를 사용하여 Nexus 원격 저장소에 저장합니다. 그런 다음 karaf 쉘의'bundle : update' 명령을 사용하여 배포하고 싶습니다. (또는 karaf 웹 콘솔의 Update 버튼을 사용하는 경우도 있습니다.) 이는 릴리스 아티팩트에서 작동하지만 스냅 샷에는 앞서 설명한 문제가 있습니다. –