gpt4 book ai didi

java - 可运行 JAR 文件 : Classes that implement "org.apache.hadoop.util.Tool" are not found

转载 作者:行者123 更新时间:2023-12-02 21:03:29 26 4
gpt4 key购买 nike

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

头等舱实现工具接口(interface)(这是导致问题的类)为简单起见,我做了空实现:

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");
}


}

我将项目导出为“可运行 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”接口(interface)时,将找不到该类。

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

那么为什么会发生这种情况,如何在命令“java -cp MyTest.jar A1”中找到“A1”?

更新:

我现在可以通过指定所需的 jar 文件来解决问题:
java -cp MyTest.jar:"/home/mosab/workspace/Hadoop Jars/Binaries/hadoop-common-2.7.3.jar" A1

如果您有一堆 jar 文件,您可以使用“将所需库复制到生成的 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

最佳答案

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

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

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

关于java - 可运行 JAR 文件 : Classes that implement "org.apache.hadoop.util.Tool" are not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42594900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com