0

メインクラスを適切に設定して、IntelliJを使用してjarを構築しました。

コマンド ライン (Windows) から "java -jar foo.jar" を実行すると、メイン ファイルが見つからないという例外が発生します。メインクラスは次のようになります。

package mypackage;

public class LockUtil {
  public static void main(String[] args) {
  ...

次の例外が発生します。

Exception in thread "main" java.lang.NoClassDefFoundError: mypackage/LockUtil
Caused by: java.lang.ClassNotFoundException: mypackage.LockUtil
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: mypackage.LockUtil. Program will exit.

マニフェスト ファイルには次のものが含まれます。

Manifest-Version: 1.0
Created-By: IntelliJ IDEA
Main-Class: mypackage.LockUtil

また、jar には、.class ファイルを含む適切なディレクトリ構造が含まれています。

4

5 に答える 5

2

もしそうならjava -tf foo.jar、あなたはこのようなものを見ますか?

META-INF/
META-INF/MANIFEST.MF
mypackage/
mypackage/LockUtil.class

どこかに別のディレクトリレベルがあるのでしょうか?

次のようなものでjarファイルを構築することにより、Javaがメインファイルがそこにあることを認識していることを確認できます。

jar cfe foo.jar mypackage.LockUtil mypackage/LockUtil.class
于 2009-07-02T16:03:26.137 に答える
1

を実行しようとしてmypackage.LockUtilいますが、使用する必要がありますmypackage.locking.LockUtil(クラスの先頭にあるステートメントに注意してpackageください)。

packageもう 1 つの可能性は、クラスを移動してステートメントの更新を忘れたことです。

于 2009-07-02T15:10:40.187 に答える
0

あなたのパッケージの名前は mypackage.locking であり、mypackage だけではないようです

于 2009-07-02T15:10:54.307 に答える
0

マニフェストのメインクラス定義は、mypackage/locking/LockUtil ではなく mypackage/LockUtil を指しているようです。

-リック

于 2009-07-02T15:11:33.103 に答える