Runnable JAR文件:实现" org.apache.hadoop.util.Tool"的类。找不到

时间:2017-03-04 10:29:11

标签: java hadoop jar executable-jar mainclass

我有一个名为MyTest的项目。它有三个类:

第一个类实现了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中:项目>>导出>> Runnable Jar文件)。

我设置" A2"作为"启动配置"中的主要类和#34;打包所需的库到生成的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"接口然后找不到类。

请注意:如果我在"启动配置"中设置了jar文件的主类。到" A1"那么命令" java -jar MyTest.jar"将正确运行并给出" Hello A1"但命令" java -cp MyTest.jar A1"仍然无法找到" A1"。

那么为什么会发生这种情况呢?我该如何制作" A1"在命令" java -cp MyTest.jar A1"?

中找到

更新

我现在可以通过指定所需的jar文件来解决问题:

java -cp MyTest.jar:"/home/mosab/workspace/Hadoop Jars/Binaries/hadoop-common-2.7.3.jar" A1

如果你有一堆jar文件,你可以导出" Runnable Jar File"使用"将所需的库复制到生成的JAR旁边的子文件夹中#34;选项然后:

java -cp MyTest.jar:./MyTest_lib/* A1

注意: MyTest_lib是包含所有jar文件的文件夹

如果你想传递java选项,参数或包名,那么:

java -Xms2048m -Option2 -cp MyTest.jar:./MyTest_lib/* PackageName.A1 Arg1 Arg2

1 个答案:

答案 0 :(得分:0)

要使A1工作,您需要在-cp中包含所有包含引用类的jar。它可能与您用于编译A1的jar列表相同。 在Windows上,列表由“;”分隔。在Linux上,列表由':'分隔。 您看到的错误是因为它无法找到A1引用的类文件。因此无法加载A1。

使用Hadoop.jar和Hadoop2.jar作为一般示例:

java -cp MyTest.jar;Hadoop.jar;Hadoop2.jar A1