5

我在 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 应用程序,它可以工作。但是当我将捆绑包作为纯 JAR 运行时java -jar myjar.jar,我收到以下错误:

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

如果我用 Eclipse 导出我的包,它可以工作。所以我的第谷配置有错误...

如何解决这个问题呢 ?Tycho 有依赖关系的 jar 吗?似乎不是这样 我错过了什么?

(我的配置:Eclipse Juno 与 m2e,Tycho 0.16.0,p2:Juno,Tycho:包装>eclipse-plugin,目标平台配置:resolver=p2 和 pomDependencies=consider。)

4

2 回答 2

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>

或者,您也可以创建一个程序集,将罐子单独包装。您需要为此编写自己的程序集描述符

于 2012-12-19T12:01:31.717 回答
0

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

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

于 2012-12-13T16:56:57.140 回答