Spark Java java.lang.NoClassDefFoundError при использовании классов в jar артефакта - PullRequest
0 голосов
/ 11 июня 2018

Я создал несколько классов в своем проекте maven и создал файл jar с использованием артефакта IntelliJ IDEA.Вот структура проекта:

+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

Мне показалось, что классы недоступны в classpath во время выполнения.

Точка Я сделал то же самое для классов SP и DFS.Я создаю файл jar и импортирую в новый проект, он работает без ошибок!

Вот мой файл maven pom.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 Ответ

0 голосов
/ 16 июня 2018

Это было из-за отсутствия необходимых зависимостей в время выполнения .История была в том, что я добавил spark-sql зависимость в файл pom.xml моего текущего проекта Maven.Ему неявно нужны были некоторые другие искровые зависимости, такие как spark-catalyst, и они будут автоматически получать их от представителей Maven.Поэтому, когда я запускаю свой код Spark-SQL в текущем проекте, это сработало.Когда я создавал свои классы как jar-артефакт и пытался использовать их в другом новом проекте, в экспортированном jar-файле он просто содержит зависимость spark-sql, а не другие вложенные зависимости, такие как spark-catalyst!Во время компиляции Java только что проверила первый уровень зависимостей и увидела, что spark-sql предоставлен, и мой код успешно скомпилирован.Но во время выполнения в дополнение к зависимостям первого уровня Java нуждался во вложенных зависимостях, таких как spark-catalyst, и они не были предоставлены!так что это вызвало ошибку!Я импортировал эти вложенные зависимости в тестовый проект в дополнение к толстому банку, и он решил ошибку!

...