我有一个可部署的maven项目,我正在尝试使用JDBC连接到配置单元服务器。这是我的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文件,其中包含manifest.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)
为什么即使在清单文件的类路径中正确配置了jar文件,我也会收到此异常?
感谢。
答案 0 :(得分:2)
java中找不到依赖项中引用的jar。可能与目标jar不在同一个文件夹中。
根据您对deploayable maven项目的意思,您有几种可能的解决方案
答案 1 :(得分:0)
您可以添加maven-dependency-plugin
以将依赖项从本地或远程存储库复制到指定位置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>compile</includeScope>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
或另一个选项使用maven-assembly-plugin
见here
答案 2 :(得分:0)
确定你想要哪个罐子(蜂房)......因为它有不同的版本
旧的verison jar是
org.apache.hadoop.hive.jdbc.HiveDriver
,最新的jar org.apache.hive.jdbc.HiveDriver
这里是新的settings
你的错误是使用旧的依赖关系和新的jar名称;