Java 作为classic jar运行OSGI包时出现NoClassDefFoundError
我有Java应用程序和RCP应用程序之间的通用代码。因此,我创建了一个OSGI捆绑包,其中包含:Java 作为classic jar运行OSGI包时出现NoClassDefFoundError,java,eclipse,maven,dependency-management,tycho,Java,Eclipse,Maven,Dependency Management,Tycho,我有Java应用程序和RCP应用程序之间的通用代码。因此,我创建了一个OSGI捆绑包,其中包含: 将其用作经典jar的主类 在我的RCP应用程序中使用它的OSGi清单 我首先使用Tycho Manifest构建了所有这些,在我需要在公共代码中使用外部jar之前,它工作得很好 我需要使用jsch,因此我在MANIFEST.MF中添加了jsch: Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Main-Class: mygroupid.Main
- 将其用作经典jar的主类
- 在我的RCP应用程序中使用它的OSGi清单
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是否有一个带有依赖项的jar?情况似乎并非如此
我错过了什么
(我的配置:EclipseJuno with m2e,Tycho0.16.0,p2:Juno,Tycho:packaging>Eclipse插件,目标平台配置:resolver=p2,pomDependencies=consive。)如果您在Linux/Unix平台上工作,您可以尝试 java-classpath:myjar.jar com.yourpackage.mainclass 如果你在windows平台上工作,你可以试试 java类路径;myjar.jar com.yourpackage.mainclass只需将添加到构建中,并让它构建一个包含所有依赖项的jar:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
. 您需要为此编写自己的程序。是的,我知道类路径。但是我需要一个完整的OSGI包,因为Eclipse可以做到这一点。我只想为命令行版本部署一个jar。如何使用Tycho构建它?您可以尝试将编写的MANIFEST.MF与生成的eclipse导出进行比较。