java - maven可部署jar "java.lang.ClassNotFoundException: org.apache.hadoop.hive.jdbc.HiveDriver"错误

标签 java maven jdbc

我有一个可部署的 Maven 项目,我正在尝试使用 JDBC 连接到 Hive 服务器。这是我的 pom 文件:

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc -->
    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-jdbc</artifactId>
        <version>2.1.1</version>
   </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>com.test.Main</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

这会生成一个 jar 文件,其中包含一个 list .mf,如下所示:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: test
Class-Path: hive-jdbc-2.1.1.jar hive-common-2.1.1.jar ...
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_72
Main-Class: com.test.Main

现在,当我尝试使用 java -jar test.jar 运行 jar 文件时,我得到了

java.lang.ClassNotFoundException: org.apache.hadoop.hive.jdbc.HiveDriver
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)

即使在 list 文件的类路径中正确配置了 jar 文件,为什么我也会收到此异常?

谢谢。

最佳答案

java似乎找不到依赖项中引用的jar。可能与目标 jar 不在同一文件夹中。

根据可部署 Maven 项目的含义,您有几种可能的解决方案

  • 将依赖项添加到容器的类路径
  • 构建一个包含依赖项的“胖”jar(使用 Maven 阴影或程序集插件)

关于java - maven可部署jar "java.lang.ClassNotFoundException: org.apache.hadoop.hive.jdbc.HiveDriver"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44755803/

相关文章:

java - 程序运行不正常

java - 使用 Maven 构建时 slf4j 版本冲突

maven - 如何使用 war 打包选项创建 Maven 父项目

java - DatabaseMetaData#g​​etTables 在 Derby 中找不到现有表

java - 将数据库类型映射到具体的 Java 类

java - 如何使字符串从方法中获取返回值?

java - 无法创建新 session 。 (原始错误: 'java -version' failed.错误:spawn ENOENT)

java - Eclipselink 获取递归实体给出不完整的结果

java - 某些节点出现故障后的 Hazelcast 执行器服务行为

java - Maven中执行标签的使用