代码之家  ›  专栏  ›  技术社区  ›  Soheil Pourbafrani

使用ActufTee jar类中的SjavaJava JavaLang.NoCuffDeFuffDror

  •  0
  • Soheil Pourbafrani  · 技术社区  · 8 年前

    我在maven项目中创建了一些类,并使用intellij idea工件创建了一个jar文件。项目结构如下:

    +ProjectName:
    ----src
        -----main
             ------java
                   ------A.B (packages)
                         --------DB
                                 BP
                                 SP
    

    在创建jar文件时,我只包含了类bp。 在新项目中导入jar文件,并在主函数中运行以下简单代码:

    import A.B.BP;
    
    public class Test {
        public static void main(String[] args) throws Exception {
    
            BP temp = new BP("Test");
        }
    }
    

    它生成时没有错误,但在运行时出现了以下错误:

    Exception in thread "main" java.lang.NoClassDefFoundError: A/B/BP
        at Test.main(Test.java:8)
    Caused by: java.lang.ClassNotFoundException: A.B.BP
    

    在运行时,类路径中似乎没有可用的类。

    我对sp和dfs类也做了同样的操作。我创建了一个jar文件并导入到一个新项目中,它运行时没有任何错误!

    这是我的小牛 XML 文件:

    <dependency>
        <groupId>com.datastax.spark</groupId>
        <artifactId>spark-cassandra-connector_2.11</artifactId>
        <version>2.0.8</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.2.1</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
    
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.25</version>
        <scope>provided</scope>
    </dependency>
    

    我评论了其他类的依赖关系。

    我怎样才能解决这个问题?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Soheil Pourbafrani    8 年前

    这是因为缺乏必要的依赖。 运行时 . 故事是我添加的 spark-sql 我当前maven项目中的依赖项 XML 文件。它隐式地需要一些其他spark依赖项,比如 spark-catalyst 会自动从Maven代表那里得到。所以当我运行 星火SQL 在当前的项目中,它起作用了。当我将我的类构建为一个工件jar并试图在另一个新项目中使用它们时,在导出的jar文件中它只包含 星火SQL 依赖项,而不是其他嵌套依赖项,如 火花催化剂 !在编译时,Java刚刚检查了第一级依赖关系,它看到了 星火SQL 提供并成功编译了我的代码。但是在运行时,除了第一级依赖项之外,Java还需要嵌套的依赖关系。 火花催化剂 他们没有被提供!所以它导致了错误!除了fat jar之外,我还将那些嵌套的依赖项导入到测试项目中,它解决了这个错误!