gpt4 book ai didi

java - 将 OSGI 包作为经典 jar 运行时出现 NoClassDefFoundError

转载 作者:搜寻专家 更新时间:2023-11-01 00:51:30 25 4
gpt4 key购买 nike

我在 Java 应用程序和 RCP 应用程序之间有通用代码。所以我创建了一个 OSGI 包,其中包含:

  • 将其用作经典 jar 的主类
  • 在我的 RCP 应用程序中使用的 OSGi list

我首先使用 Tycho Manifest 构建了所有内容,并且在我需要在我的公共(public)代码中使用外部 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-with-dependencies 吗?好像不是这样我错过了什么?

(我的配置:带有 m2e 的 Eclipse Juno,Tycho 0.16.0,p2:Juno,Tycho:packaging>eclipse-plugin,target-platform-configuration:resolver=p2 和 pomDependencies=consider。)

最佳答案

只需添加 maven-assembly-plugin到您的构建,并让它构建一个包含所有依赖项的 jar:

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

或者,您也可以创建一个程序集,其中的 jar 是 packed individually .你需要自己写 assembly descriptor为此。

关于java - 将 OSGI 包作为经典 jar 运行时出现 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13863943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com