5

Java アプリケーションと RCP アプリケーションの間で共通のコードがあります。そこで、以下を含む OSGI バンドルを作成しました。

  • クラシック jar として使用するためのメイン クラス
  • 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 アプリケーションをビルドすると、動作します。しかし、バンドルを で純粋な JAR として実行するとjava -jar myjar.jar、次のエラーが発生します。

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

バンドルを Eclipse でエクスポートすると、機能します。だから私はtycho設定にエラーがあります...

この問題を解決するには?Tycho の jar-with-dependencies はありますか? そうではないようです 見逃したものは何ですか?

(私の構成: Eclipse Juno with m2e, Tycho 0.16.0, p2: Juno, Tycho: Packaging>eclipse-plugin, target-platform-configuration: resolver=p2 and 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>

または、jar が個別にパックされたアセンブリを作成することもできます。これには、独自のアセンブリ記述子を記述する必要があります。

于 2012-12-19T12:01:31.717 に答える
0

Linux / Unixプラットフォームで作業している場合は、java -classpath:myjar.jarcom.yourpackage.mainclassを試すことができます。

Windowsプラットフォームで作業している場合は、java -classpath;myjar.jarcom.yourpackage.mainclassを試すことができます。

于 2012-12-13T16:56:57.140 に答える