2010-06-23 1 views
0

java 명령을 사용하여 osgi를 실행합니다. java -jar org.eclipse.osgi_3.5.1.R35x_v20090827.jar -console 그런 다음 번들은 ./plugins 디렉토리에서 찾을 수 있습니다.osgi에서 jar 파일을 사용하지 않으려면 어떻게해야합니까?

두 가지 질문이 있습니다. (1) 로컬 컴퓨터에서 1 클래스 파일을 편집하고 원격 서버로 전송했습니다. 그래서 osgi에 항아리가 아닌 클래스를로드하고 싶습니다. 어떻게해야합니까? osgi 프레임 워크가이 기능을 지원하지 않는 경우. 하나의 클래스 파일 만 편집하고 원격 서버로 전송하는 jar 파일을 패키징해야합니다. 그것을 포장하고 전체 항아리를 옮기는 것을 천천히하는 것입니다.

(2) 백그라운드에서 명령을 실행할 때. 어떻게 osgi 콘솔을 다시 얻을 수 있습니까?

답변

0

클래스를로드하는 데 비표준 방법이있을 수 있지만 순수 OSGi에서는이를 수행 할 방법이 없습니다. OSGi에서 번들 (jar 파일)은 OSGi 프레임 워크에 의해로드되고 관리 될 수있는 전달 패키지입니다. 일반적으로 각 번들은 별도의 클래스 로더에 의해로드됩니다. 많은 이점을 얻을 수 있습니다. 번들이 어떤 버전의 패키지를 내보내거나 가져올 지 지정합니다. Manifest에서는 이러한 관계를 규칙적인 방식으로 나타냅니다. OSGi 프레임 워크가 다른 번들을 방해하지 않고 종속성을 관리 할 수있는 방법.

0

디버깅을 위해 클래스를 바꾸려는 경우 핫 코드 대체를 지원하는 VM에서 원격 디버그를 시도 할 수 있습니다. 이렇게하면 OSGi를 다시 시작하지 않고도 단계별로 문제를 찾아 해결할 수 있습니다.

수정 프로그램을 찾으면 번들을 다시 빌드해야합니다. OSGi의 패키징 메커니즘이 번들 인 것은 맞다.

두 번째 질문에 답하려면 콘솔을 원한다면 백그라운드에서 실행하십시오. 자체 셸에서 명령을 실행하기 만하면됩니다. 개발시, 이것은 문제가되어서는 안됩니다. 배포 할 때 실제로 콘솔을 사용해서는 안됩니다. Eclipse의 P2와 같은 기술은 배포 된 OSGi 런타임 관리에 도움이 될 수 있습니다.

0

답변 질문 2 : 텔넷 및 SSH를 지원하는 OSGi 용 쉘이 있습니다. 그 중 하나를 사용하면 백그라운드에서 프로세스를 실행할 수 있지만 여전히 원격으로 연결됩니다 (심지어는 분명히).

0

번들을 설치하기 위해 bundleContext.installBundle (String location)을 사용하는 경우, jar이 패키지되지 않은 폴더를 서버에서 정의 할 수 있습니다. 그런 다음 해당 클래스 만 서버 폴더에 복사하고 해당 번들에서 update 명령을 호출 할 수 있습니다.

m2e 및 maven-bundle-plugin과 함께 Eclipse를 사용하는 경우 클래스를 저장 한 직후에 대상/클래스 디렉토리를 서버의 폴더에 sinchronize 할 수 있습니다 (MANIFEST.MF가 곧 새로 고쳐지기 때문에 .java 파일을 저장할 때)

생성 된 MANIFEST.MF 파일을 항상 복사하여 Import-Package 섹션도 새로 고쳐야한다는 것을 알 수 있습니다.

ssh 또는 telnet을 통해 서버에 연결할 수있는 경우 (예 : felix-osgi-console 또는 equinox-console을 사용하여) 짧은 쉘 스크립트 (또는 Windows에서 cmd)를 작성할 수 있습니다.

관련 문제