当前位置: 首页 > 知识库问答 >
问题:

可运行JAR文件:未找到实现“org.apache.hadoop.util.Tool”的类

麻宾白
2023-03-14

我有一个项目叫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中:项目

我在“Launch Configuration”和“Packaged required libraries into generated JAR”中设置“A2”作为主类,输出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”。

那么为什么会发生这种情况,我如何在命令“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文件,您可以将“Runnable Jar File”导出为“将所需库复制到生成的JAR旁边的子文件夹中”选项,然后:

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

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

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

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

共有1个答案

寇夜洛
2023-03-14

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

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

java -cp MyTest.jar;Hadoop.jar;Hadoop2.jar A1
 类似资料:
  • 我想知道如何在Eclipse中的源代码包(即/src/resources/images/或/resources/images/)内部或外部的资源文件夹中创建一个具有资源(图片、PDF)的可运行JAR。目前,我的资源在我的eclipse项目的source文件夹中,但我也在包中的它自己的文件夹中尝试过。该程序在eclipse中构建和执行得很好,但当我将其导出为可运行的jar时,在桌面上运行时,我总是得

  • 行中出现错误(JAXBContext.newInstance): 当它作为测试用例执行时,它运行良好,使用: 或mvn:Spring:引导运行 但在使用以下方法运行jar时会导致问题: 运行java-jar并使用postman命中时出错。 版本信息 同一个jar在开发服务器上运行良好,但不在临时服务器上运行。开发和登台服务器都有相同的环境(java版本、mvn,一切都一样)。我将这些依赖项添加到p

  • 我有一个简单的Java项目,它有一个文件输入。Java语言输入代码。java是这样的- 现在,我已经通过导出在Eclipse中创建了一个可执行的jar文件- 现在,当我尝试通过命令提示符打开它时,它工作得非常好。 但是,当我双击runnable jar文件时,我希望打开命令提示符。这里有什么问题? 谢谢

  • 在一个项目中,我们将Hibernate与HikariCP结合使用,并且在Eclipse中一切都很好。但一旦我生成了一个jar文件(Maven),就再也找不到hikaricp了。我已经从各个可能的角度考虑了这个问题,但我无法找出问题所在。。。 坚持不懈xml 波姆。xml 如果我在Eclipse中运行此功能,则一切正常: 01:14:05,436信息HikariDataSource: 70-Hika

  • 我有独立的应用程序,它绑定在可执行的中。在可执行的清单文件中,有一个class-path条目,其中列出了所有依赖的(包括所有的日志实现jar)。这个可执行jar还包含文件。 使用这种结构,当我使用简单的命令运行应用程序时,应用程序在正确的日志记录下运行良好。但这里的主要问题是,要更改日志级别,需要打开jar文件,而我不能要求客户端这样做。所以我将放在了jar外部,但现在所有日志记录都发生在控制台上

  • 我在安装Psycopg2时遇到了麻烦。尝试时出现以下错误: 但问题是实际上在我的中;它运行起来没有任何问题: 我对这些错误感到困惑。有人能帮忙吗? 顺便说一下,我所有命令。我也在RHEL 5.5上。