私はMyTestというプロジェクトを持っています。これは3つのクラスがあります。実行可能なJARファイル: "org.apache.hadoop.util.Tool"を実装するクラスが見つかりません
ファーストクラスは私が空の実装をした単純化のためのツールのインタフェース(これが問題を引き起こしているクラスである)を実装します。
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.util.Tool;
public class A1 extends Configured implements Tool{
public static void main(String[] args) throws Exception {
System.out.println("Hello A1");
}
@Override
public int run(String[] args) throws Exception {
// TODO Auto-generated method stub
return 0;
}
}
第二のクラスは通常のクラスであります:
public class A2 {
public static void main(String[] args) throws Exception {
System.out.println("Hello A2");
}
}
第三のクラスは、通常のクラスである:
public class A3 {
public static void main(String[] args) throws Exception {
System.out.println("Hello A3");
}
}
私はプロジェクトを「Runnable Jar」としてエクスポートしました。 Eclipseの場合:プロジェクト>>エクスポート>>実行可能なJARファイル)。
私は今、「起動設定」でメインクラスとして「A2」に設定し、「生成されたJARにパッケージ化に必要なライブラリ」と出力JARまたは「エクスポート先」の名前が「MyTest.jar」である
私は、コマンドを実行した場合、予想通り:
java -jar MyTest.jar
は、それが印刷されます:
Hello A2
私はコマンドを実行する場合:
をjava -cp MyTest.jar A2
それが印刷されます:
Hello A2
を、私はコマンドを実行している場合:
java -cp MyTest.jar A3
をそれを印刷します:
Hello A3
を私が実行している場合さて、問題は、ありますコマンド:
java -cp MyTest.jar A1
私はこのエラーを与える:
Error: Could not find or load main class A1
私はそれを何度も試み、異なるシナリオで問題は同じである:クラスは「org.apache.hadoop.util.Tool」インタフェースを実装したときにそのクラスは見つからないでしょう。
に注意してください:私は「A1」に「起動設定」でjarファイルのメインクラスを設定した場合、コマンド「MyTest.jar -jar javaのは、」「こんにちはA1」を正しく実行していますされますが、コマンド "java -cp MyTest.jar A1"は依然として "A1"を見つけることができません。
なぜこのようなことが起こり、 "java -cp MyTest.jar A1"コマンドで "A1"を見つけることができますか?
UPDATE:
私は、必要なjarファイルを指定することで、問題を解決するために、今できる午前:
java -cp MyTest.jar:"/home/mosab/workspace/Hadoop Jars/Binaries/hadoop-common-2.7.3.jar" A1
そして、あなたはjarファイルの束を持っている場合は、「RunnableをJARファイルをエクスポートすることができます[コピーに必要な次の生成されたJARにサブフォルダにライブラリ 『オプションと"と』:
java -cp MyTest.jar:./MyTest_lib/* A1
お知らせ: MyTest_libは、すべてのjarファイルに
を含むフォルダのときに、Javaオプション、引数、またはパッケージ名を渡す場合:
java -Xms2048m -Option2 -cp MyTest.jar:./MyTest_lib/* PackageName.A1 Arg1 Arg2
おかげで、:一般的な例としてHadoop.jarとHadoop2.jarを使用して
?私のプロジェクトでは、いくつかのクラスを使用するメインクラスがjarファイルに存在し、これらのクラスは他のjarファイルなどのクラスを使用しています。したがって、すべてのjarファイル、つまり依存するjarファイルや扶養プログラムの依存ファイルなどを含めることにします。jarファイルの巨大なリストがあります。 –
注意:必要なすべてのjarファイルは既にRunnable Jarファイルに入っていますので、どうすれば簡単に使用できますか?また、 "launch configuration"で指定されたメインクラスは、必要なjarがすでにMANIFEST.MFに記述されていると思うので、 "java -jar MyTest.jar"という依存関係/ jarを指定する必要はありません。 MFファイルを使用して、 "java"コマンドにメインクラスのjarを含めるよう指示します。 –
私はあなたの最善の策は、メインクラスとしてA1を持つjarファイルを再作成し、java -jar MyTest.jarを使用することだと思います。 Runnable Jar Fileを作成すると、1つのクラスがMain-Classとして識別されました。これはMETA-INF/MANIFEST.MFのjarファイルの中で見ることができます。これは、 "java -jar"を使用するときにどのクラスがメインクラスであるかをjavaがどのように知っているかを示します。 – ProgrammersBlock