【问题标题】:NoClassDefFoundError when running an OSGI bundle as classic jar将 OSGI 包作为经典 jar 运行时出现 NoClassDefFoundError
【发布时间】:2012-12-01 14:01:57
【问题描述】:

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

  • 一个将其用作经典 jar 的主类
  • 在我的 RCP 应用程序中使用它的 OSGi 清单

我首先使用 Tycho Manifest 构建了所有内容,它运行良好,直到我需要在我的公共代码中使用外部 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 吗?似乎并非如此 我错过了什么?

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

【问题讨论】:

    标签: java eclipse maven dependency-management tycho


    【解决方案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>
    

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

    【讨论】:

      【解决方案2】:

      如果你在 Linux/Unix 平台上工作,你可以试试 java -classpath :myjar.jar com.yourpackage.mainclass

      如果你在windows平台上工作,你可以试试 java -classpath ;myjar.jar com.yourpackage.mainclass

      【讨论】:

      • 是的,我知道类路径。但是我需要一个完整的 OSGI 包,因为 Eclipse 可以做到。我只想为命令行版本部署一个 jar。如何用 Tycho 构建它?
      • 您可以尝试将您编写的 MANIFEST.MF 与生成的 eclipse 导出进行比较。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多