を使用して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のインストールを試みました。
私は他に何をすべきですか?
私はこれを次のように動作させました:
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
Java -cp "フルパスのjar"メイン
一部のパッケージで「public static void main」を持つ他のクラスを実行するには、
Java -cp "jarのフルパス" package1.package2.packages-hierarchy.ClassHavingMain
1. Manifest.txtというテキストファイルを作成し、値を次のように指定します。
メインクラス:classes.TestClass
2. jarを作成します
jar cfm test.jar Manifest.txt classes/*。class
3. jarを実行します
Java -jar test.jar
私はWordでコードをコピーして貼り付けたので、最後に同じ問題が発生しました
これは、完全な情報なしではデバッグするのが非常に困難です。
この時点で最も可能性の高い2つのことは、jar内のファイルがJAR内のディレクトリに保存されていないか、正しいファイルではないことです。
TestClass.classを保存する必要があります-このストアで初めてソースファイルTestClass.Javaを使用する人もいます。
また、TestClass.classがクラスのパスとともに表示されるように、jarファイルを作成する必要があります。 「/ classes」ではないことを確認してください。 Zipを使用してファイルを調べ、「クラス」のパスがあることを確認します。
同様の問題がありましたが、jarファイルが配置されているすべての親フォルダーに実行特権を付与することで解決できました(Linuxシステム上)。
例:
/folder1/folder2/folder3/executable.jar
3つすべてのフォルダー(folder1、folder2、folder3)およびexecutable.jarは現在のユーザーのexecute-privilegeが必要です。そうでない場合、「メインクラスを見つけられないかロードできませんでした...」というエラーが返されます。
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がプログラムに長いクラスパスを提供するために使用するものです。
これは古い質問であることは知っていますが、最近この問題が発生しましたが、どの回答も私を助けませんでした。しかし、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
のルートに直接追加され、問題が解決します。
次の指示に従って、Eclipseで実行可能.jarを作成します。次に、コマンド「Java -jar .jar」を実行してプログラムを起動します。
メインフェストを作成し、メインクラスとライブラリファイルのパーツを含めます。
http://Java67.blogspot.com/2014/04/how-to-make-executable-jar-file-in-Java-Eclipse.html
少なくとも私がこれを行った方法は次のとおりです。
ネストされた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
これが誰かを助けることを願っています
FTPでjarファイルを転送した後、同じエラーメッセージが表示され、バイナリモードに設定するのを忘れました。
MANIFEST.MF
に間違ったクラスパスを書き込んだため、このエラーが発生しました。
このエラーは、Word jarの前に誤って「-」を見逃した場合でも発生します
間違ったコマンドJava jar test.jar
正しいコマンドJava -jar test.jar