ClassNotFoundException при загрузке класса из JAR - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь создать простую программу, которая подключается к Impala, выполняет запрос и возвращает результат запроса.Однако я застрял в самом начале: по какой-то причине я не могу загрузить класс драйвера Impala JDBC из JAR-файла.

Файл JAR, который я пытаюсь загрузить, находится в папке lib /, котораяв корневой папке моего проекта.В противном случае мой проект следует обычной директории Maven.Я добавил путь к файлу JAR в pom.xml моего проекта.Я проверил MANIFEST.MF и путь там.Я попытался запустить мою программу с параметром -classpath lib / ImpalaJDBC41.jar, а также попытался поместить файл JAR в папку src / main / resources /.

Вот часть моего pom.xml, где я установилПуть к классу:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.1</version>
    <executions>
        <!-- Run shade goal on package phase -->
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <!-- add Main-Class to manifest file -->
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <manifestEntries>
                            <Main-Class>com.example.App</Main-Class>
                            <Class-Path>lib/ImpalaJDBC41.jar</Class-Path>
                        </manifestEntries>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

Вот мой MANIFEST.MF

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: 400594
Class-Path: lib/ImpalaJDBC41.jar
Created-By: Apache Maven 3.5.3
Build-Jdk: 1.8.0_172
Main-Class: com.example.App

Вот мой код Java:

package com.example;

import java.lang.Class;

public final class App {
    private App() {
    }

    /**
     * @param args The arguments of the program.
     */
    public static void main(String[] args) {  
        try {
            Class<?> cls = Class.forName("com.cloudera.impala.jdbc41.Driver");
            System.out.println("Class found: " + cls.getName());
        } catch (ClassNotFoundException ex) {
            System.out.println("Class not found: " + ex);
        }
    }
}

Независимо от того, что я пытаюсь сделать, яполучить исключение java.lang.ClassNotFoundException.Я подозреваю, что эта проблема как-то связана с classpath, но я не могу понять, что это такое.

1 Ответ

2 голосов
/ 18 апреля 2019

Насколько я понимаю, в вашем теге конфигурации pom.xml удалите тег <Class-Path> и добавьте путь к классу, как показано ниже. Это решит вашу проблему. Вот ссылка для более уточнения . Также "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer" не содержит тега classpath.

<configuration>
          <additionalClasspathElements>
            <additionalClasspathElement>path/to/additional/resources</additionalClasspathElement>

</configuration>
...