1

非常に単純なアプリを jar にパッケージ化して、ユーザーに配布しようとしています。Mac OS X 10.6.8 で Eclipse Indigo と m2e プラグインを使用しています。

Maven build: package ゴールを使用して、jar としてパッケージ化しました。jar をダブルクリックして開くと、GUI が開き、機能しているように見えますが、実行ボタンをクリックしても何も起こりません。(Eclipse 内で Run As... を実行すると、プログラムは正常に動作します)。

コマンド ラインから jar を実行しようとすると、GUI も開かず、次のエラーが表示されます。

Exception in thread "main" java.lang.NoClassDefFoundError: str-profile-comparison-0/0/1-SNAPSHOT    /jar
Caused by: java.lang.ClassNotFoundException: str-profile-comparison-0.0.1-SNAPSHOT.jar
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

クラスパスを確認するために、jar からマニフェスト ファイルを抽出したところ、次のようになりました。

Manifest-Version: 1.0
Built-By: username
Build-Jdk: 1.6.0_24
Class-Path: poi-3.7.jar poi-ooxml-3.7.jar poi-examples-3.7.jar xmlbean
s-2.3.0.jar stax-api-1.0.1.jar dom4j-1.6.1.jar xml-apis-1.0.b2.jar po
i-ooxml-schemas-3.7.jar geronimo-stax-api_1.0_spec-1.0.jar poi-scratc
hpad-3.7.jar junit-4.8.2.jar
Created-By: Apache Maven
Main-Class: com.{companyname}.strprofilecomparison.logic.StrComparatorGUI
key: value
url:
mode: development
Archiver-Version: Plexus Archiver

ここで何が起こっているのかについていくつか質問があります。

  1. jar ファイルをダブルクリックすると GUI が開くのに、コマンド ラインで実行しようとすると GUI が開かないのはなぜですか?

  2. クラスパスは、使用している外部jarへの絶対パスを定義する必要があると思います.POMファイルでそれを設定するにはどうすればよいですか?

4

1 に答える 1

1

そのマニフェストは、すべての依存関係が jar と同じディレクトリにあることを示しています。それが真実でない場合は、行ってはいけません。

個人的には、appassemblyr プラグインを使用して、シェル スクリプトを起動するデバイスを作成します。または、それらを組み込んだ uberjar を作成するための shade プラグイン。または、OSX スタブについて学んで、OSX に適した .app アプリケーションを作成してください。

于 2012-05-29T23:59:13.807 に答える