我有一个可部署的 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/