非常に単純なアプリを 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
ここで何が起こっているのかについていくつか質問があります。
jar ファイルをダブルクリックすると GUI が開くのに、コマンド ラインで実行しようとすると GUI が開かないのはなぜですか?
クラスパスは、使用している外部jarへの絶対パスを定義する必要があると思います.POMファイルでそれを設定するにはどうすればよいですか?