2012-12-13 2 views
5

Java 응용 프로그램과 RCP 응용 프로그램간에 공통 코드가 있습니다.OSGI 번들을 기본 jar로 실행하면 NoClassDefFoundError

  • 메인 클래스가 나는 티코 모든를 구축

내 RCP 응용 프로그램에서 사용하는 고전 항아리

  • 같은 OSGi 프레임 매니페스트를 사용하는 : 그래서 내가 포함 된 OSGI 번들을 만들었습니다 Manifest-first. 공통 코드에서 외부 항아리를 사용해야 할 때까지 제대로 작동했습니다.

    Manifest-Version: 1.0 
    Bundle-ManifestVersion: 2 
    Main-Class: mygroupid.Main 
    Bundle-Name: Common tools 
    Bundle-SymbolicName: common-tools 
    Bundle-Version: 1.0.1.qualifier 
    Export-Package: mygroupid, 
         mygroupid.tools 
    Bundle-RequiredExecutionEnvironment: JavaSE-1.6 
    Import-Package: org.osgi.framework;version="1.3.0" 
    Require-Bundle: com.jcraft.jsch;bundle-version="0.1.46" 
    

    나는 티코 내 RCP 응용 프로그램을 구축하고 그것을 작동 :

    나는 내가 내 MANIFEST.MF에 jsch 추가해야 jsch 사용해야합니다. 이클립스 내 번들을 내보내는 경우

    Exception in thread "main" java.lang.NoClassDefFoundError: com/jcraft/jsch/JSchException 
    

    이 작동 : 나는 java -jar myjar.jar 순수 JAR로 번들을 실행할 때, 나는 다음과 같은 오류가 발생합니다. 그래서 나는 타이코 구성에 오류가 있습니다 ...

    어떻게이 문제를 해결할 수 있습니까? Tycho에 jar-with-dependencies가 있습니까? 그것은 사실이 아닌 것 같습니다. 내가 놓친 것은 무엇입니까?

    (내 구성 : m2e와 이클립스 주노, 티코 0.16.0, P2 : 주노, 티코 : 포장> 이클립스 플러그인, 대상 플랫폼 구성 : 리졸버 = P2와 pomDependencies = 고려.)

  • 답변

    0

    경우 리눅스/유닉스 플랫폼에서 작업하고, 당신이 자바 -classpath 시도 할 수 있습니다 : 당신은 윈도우 플랫폼에서 일하는 경우 myjar.jar com.yourpackage.mainclass

    을, 당신은 자바 클래스 패스를 시도 할 수 있습니다; myjar.jar co.kr에서. yourpackage.mainclass

    +0

    예, 클래스 경로를 알고 있습니다. Eclipse에서 할 수있는 것처럼 완전한 OSGI 번들이 필요합니다. 커맨드 라인 버전에 하나의 jar 파일 만 배포하고 싶습니다. Tycho와 함께 구축하는 방법? – cswormy

    +0

    생성 한 Eclipse 내보내기로 작성한 MANIFEST.MF를 비교해 볼 수 있습니다. – Weibo

    1

    빌드에 maven-assembly-plugin을 추가하기 만하면됩니다. 이 모든 종속성과 함께 항아리를 구축 T : 항아리가 packed individually을 어디에

    <plugin> 
        <artifactId>maven-assembly-plugin</artifactId> 
        <version>2.4</version> 
        <configuration> 
         <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
         </descriptorRefs> 
        </configuration> 
    </plugin> 
    

    또는, 당신은 또한 어셈블리를 생성 할 수 있습니다. 이를 위해 직접 assembly descriptor을 작성해야합니다.