我有一个叫做mytest的项目。它有三个类:
第一个类实现工具接口(这是导致问题的类)为了简单起见,我做了空实现:
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:project>>export>>runnable jar文件中)。
我在“launch configuration”和“packaged required libraries into generated jar”中设置了“a2”作为主类,输出jar或“export destination”的名称是“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”接口时,将找不到该类。
请注意:如果我在“launch configuration”中将jar文件的主类设置为“a1”,那么命令“java-jar mytest.jar”将正确运行并给出“hello a1”,但是命令“java-cp mytest.jar a1”仍然无法找到“a1”。
那么,为什么会发生这种情况,如何在命令“java-cpmytest.jar a1”中找到“a1”?
更新:
我现在可以通过指定所需的jar文件来解决这个问题:
java -cp MyTest.jar:"/home/mosab/workspace/Hadoop Jars/Binaries/hadoop-common-2.7.3.jar" A1
如果你有一堆jar文件,你可以导出“runnable jar file”和“copy required libraries into a sub folder next the generated jar”选项,然后:
java -cp MyTest.jar:./MyTest_lib/* A1
注意:mytest\u lib是包含所有jar文件的文件夹
如果要传递java选项、参数或包名,则:
java -Xms2048m -Option2 -cp MyTest.jar:./MyTest_lib/* PackageName.A1 Arg1 Arg2
1条答案
按热度按时间3b6akqbq1#
要使a1正常工作,需要在-cp中包含所有包含引用类的jar。这可能与编译a1时使用的jar列表相同。在windows上,列表由“;”分隔。在linux上,列表由“:”分隔。您看到的错误是因为它找不到a1引用的类文件。因此无法加载a1。
使用hadoop.jar和hadoop2.jar作为一般示例: