web-dev-qa-db-ja.com

jarファイルでメインクラスを見つけられなかったか、ロードできませんでした

を使用してjarをロードしようとしています

@echo off
Java -jar Test.jar
pause

のマニフェストで

Manifest-Version: 1.0
Main-Class: classes.TestClass

Jarディレクトリでは、展開したときにclasses\TestClassファイルがはっきりと見えます。

編集:classes.TestClassにはpublic static void main(String[] args)があります。

classes.TestClassのパッケージ減速はpackage classes;です

しかし、私はまだエラーメッセージを取得し続けます

Could not find or load main class classes.TestClass

私はこの問題で見つけることができたすべてを経験しましたが、どれも役に立たないようです。

クラスパスの編集、マニフェストのやり直し、新しいJREのインストールを試みました。

私は他に何をすべきですか?

40
Austin

私はこれを次のように動作させました:

TestClass.Java

package classes;

public class TestClass {

    public static void main(String[] args) {
        System.out.println("Test");
    }

}

コマンドラインでjavacを使用して、TestClass.classを生成します。 TestClass.classフォルダーにclasses/を配置します。

MANIFEST.MF

Manifest-Version: 1.0
Main-Class: classes.TestClass

次に実行する

jar cfm test.jar MANIFEST.MF classes/

次に、次のように実行します

Java -jar test.jar
23
BeRecursive

Java -cp "フルパスのjar"メイン

一部のパッケージで「public static void main」を持つ他のクラスを実行するには、

Java -cp "jarのフルパス" package1.package2.packages-hierarchy.ClassHavingMain

16
Kalidas Y

1. Manifest.txtというテキストファイルを作成し、値を次のように指定します。

メインクラス:classes.TestClass

2. jarを作成します

jar cfm test.jar Manifest.txt classes/*。class

3. jarを実行します

Java -jar test.jar

9
Arham

私はWordでコードをコピーして貼り付けたので、最後に同じ問題が発生しました

5
Max Carroll

これは、完全な情報なしではデバッグするのが非常に困難です。

この時点で最も可能性の高い2つのことは、jar内のファイルがJAR内のディレクトリに保存されていないか、正しいファイルではないことです。

TestClass.classを保存する必要があります-このストアで初めてソースファイルTestClass.Javaを使用する人もいます。

また、TestClass.classがクラスのパスとともに表示されるように、jarファイルを作成する必要があります。 「/ classes」ではないことを確認してください。 Zipを使用してファイルを調べ、「クラス」のパスがあることを確認します。

3
arcy

同様の問題がありましたが、jarファイルが配置されているすべての親フォルダーに実行特権を付与することで解決できました(Linuxシステム上)。

例:

/folder1/folder2/folder3/executable.jar

3つすべてのフォルダー(folder1、folder2、folder3)およびexecutable.jarは現在のユーザーのexecute-privilegeが必要です。そうでない場合、「メインクラスを見つけられないかロードできませんでした...」というエラーが返されます。

2
Alex

MANIFEST.MFの誤ったエントリが読み込みエラーを引き起こしたときに、奇妙な問題が発生しました。これは、非常に単純なscalaプログラムを起動しようとしたときでした。

間違った:

Main-Class: jarek.ResourceCache
Class-Path: D:/lang/scala/lib/scala-library.jar

正しい:

Main-Class: jarek.ResourceCache
Class-Path: file:///D:/lang/scala/lib/scala-library.jar

間違ったバージョンでは、OPと同じように、不可解なメッセージが表示されていました。おそらく、マニフェストファイルの解析中に、不正な形式のURL例外のようなものを言う必要があります

マニフェストファイルで絶対パスを使用することは、IntelliJがプログラムに長いクラスパスを提供するために使用するものです。

2
Jarekczek

これは古い質問であることは知っていますが、最近この問題が発生しましたが、どの回答も私を助けませんでした。しかし、Ryan Atkinsonの答えに対するCorralのコメントは、私をこの問題にひっくり返しました。

コンパイル済みのクラスファイルはすべてtarget/classesにありましたが、これは私の場合はパッケージではありません。 Appクラスはデフォルトの名前のないパッケージにあったため、プロジェクトのルートディレクトリからjar cvfe App.jar target/classes Appでパッケージ化しようとしました。

新しく作成されたApp.jarは、ディレクトリApp.classにクラスtarget/classesを持つため、これは機能しません。このjarをJava -jar App.jarで実行しようとすると、Appクラスが見つからないと文句を言います。これは、App.jar内のパッケージがプロジェクト内の実際のパッケージと一致しないためです。

これは、target/classesを使用してjar cvfe App.jar . Appディレクトリから直接jarを作成することで解決できます。これは私の意見ではかなり面倒です。

簡単な解決策は、フォルダーを一覧表示するデフォルトの方法を使用する代わりに、-Cオプションを使用して追加するフォルダーを一覧表示することです。したがって、私の場合、正しいコマンドはJava cvfe App.jar App -C target/classes .です。これにより、target/classesディレクトリ内のすべてのファイルがApp.jarのルートに直接追加され、問題が解決します。

1
Log2

次の指示に従って、Eclipseで実行可能.jarを作成します。次に、コマンド「Java -jar .jar」を実行してプログラムを起動します。

メインフェストを作成し、メインクラスとライブラリファイルのパーツを含めます。

http://Java67.blogspot.com/2014/04/how-to-make-executable-jar-file-in-Java-Eclipse.html

1
user1457659

少なくとも私がこれを行った方法は次のとおりです。

ネストされたsrcツリー(com.test.myclass.MyClassなど)があり、ルートディレクトリからコンパイルする場合は、次の手順を実行する必要があります。

1)jarを作成するとき(通常これをスクリプトに入れます):jar -cvfm my.jar com/test/myclass/manifest.txt com/test/myclass/MyClass.class

2)マニフェストは次のようになります。

Mainfest-version:1.0 Main-Class:com.test.myclass.MyClass Class-Path:。 my.jar

3)これで、次のような場所からjarを実行できます。

Java -jar my.jar

これが誰かを助けることを願っています

1
Ramjet

FTPでjarファイルを転送した後、同じエラーメッセージが表示され、バイナリモードに設定するのを忘れました。

0
vincent

MANIFEST.MFに間違ったクラスパスを書き込んだため、このエラーが発生しました。

0
Sadap

このエラーは、Word jarの前に誤って「-」を見逃した場合でも発生します

間違ったコマンドJava jar test.jar

正しいコマンドJava -jar test.jar

0
mGeek