我在Java应用程序和RCP应用程序之间有共同的代码。所以我创建了一个OSGI包,其中包含:
我用Tycho Manifest-first构建了所有内容,并且它工作正常,直到我需要在我的公共代码中使用外部jar。
我需要使用jsch,所以我在我的MANIFEST.MF中添加了jsch:
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"
我使用Tycho构建我的RCP应用程序,它可以工作。但是当我使用java -jar myjar.jar
将包作为纯JAR运行时,我收到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/jcraft/jsch/JSchException
如果我用Eclipse导出我的包,它就可以了。所以我的tycho配置有错误......
如何解决这个问题? 对Tycho有依赖的jar吗?似乎并非如此 我错过了什么?
(我的配置:带有m2e的Eclipse Juno,Tycho 0.16.0,p2:Juno,Tycho:打包> eclipse-plugin,target-platform-configuration:resolver = p2和pomDependencies =考虑。)
答案 0 :(得分:1)
只需将maven-assembly-plugin添加到您的构建中,然后让它构建一个包含所有依赖项的jar:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
或者,您也可以创建一个罐子packed individually的装配体。您需要为此编写自己的assembly descriptor。
答案 1 :(得分:0)
如果你在Linux / Unix平台上工作,你可以试试 java -classpath:myjar.jar com.yourpackage.mainclass
如果你在Windows平台上工作,你可以试试 java -classpath; myjar.jar com.yourpackage.mainclass