Dependencies Maven未正确设置依赖项的类路径
操作系统名称:“linux”版本:“2.6.32-27-generic”arch:“i386”系列:“unix” ApacheMaven 2.2.1(r801777;2009-08-06 12:16:01-0700) Java版本:1.6.0_20 我试图在ubuntu中使用mysql依赖项和maven。如果我将maven下载的“mysql-connector-java-5.1.14.jar”文件移动到我的$java_HOME/jre/lib/ext/文件夹中,运行jar时一切正常 我认为我应该能够在pom.xml文件中指定依赖项,maven应该负责自动设置依赖项jar的类路径。这是不对的吗 我的pom.xml文件如下所示:Dependencies Maven未正确设置依赖项的类路径,dependencies,maven,classpath,Dependencies,Maven,Classpath,操作系统名称:“linux”版本:“2.6.32-27-generic”arch:“i386”系列:“unix” ApacheMaven 2.2.1(r801777;2009-08-06 12:16:01-0700) Java版本:1.6.0_20 我试图在ubuntu中使用mysql依赖项和maven。如果我将maven下载的“mysql-connector-java-5.1.14.jar”文件移动到我的$java_HOME/jre/lib/ext/文件夹中,运行jar时一切正常 我认为我应该
4.0.0
com.ion.common
试验准备
1.0-快照
罐子
测试准备
http://maven.apache.org
UTF-8
org.apache.maven.plugins
maven jar插件
真的
com.ion.common.App
朱尼特
朱尼特
3.8.1
测试
mysql
mysql连接器java
5.1.14
编译
命令“mvn package”构建它时没有任何问题,我可以运行它,但是当应用程序尝试访问数据库时,会出现以下错误:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at com.ion.common.Functions.databases(Functions.java:107)
at com.ion.common.App.main(App.java:31)
它失败的线路是:
Class.forName("com.mysql.jdbc.Driver");
谁能告诉我我做错了什么或如何修复它吗?Maven确实正确地将类路径设置为依赖项,但没有以存储库位置作为前缀。它在您的
清单
文件中看起来像这样
Class-Path: mysql-connector-java-5.1.14.jar
您可以将从属jar放在与正在运行的jar相同的文件夹中
请参阅拉古兰朝正确的方向推了我一下。让maven负责自动复制JAR的方法是在pom.xml文件的标记中添加以下代码:
org.apache.maven.plugins
让maven将罐子打包在一起会很好,但这足以回答这个问题。有关stackoverflow的相关回答:
我知道这个问题很老了,但它出现在让Maven使用快照版本正确设置依赖项的搜索顶部,我必须改进已接受的解决方案以使我的类路径解析正确工作
我遇到的问题是,maven jar插件包含依赖项的resolvedVersion(例如--.jar),而maven依赖项插件(从版本2.5.1开始)复制依赖项,保留它们的基本版本--SNAPSHOT.jar)。(有关该增强功能的更多信息,请参阅。)
为了让事情顺利进行,我必须按如下方式关闭此行为:
。。。
org.apache.maven.plugins
maven jar插件
真的
依赖性/
com.example.MainClass
org.apache.maven.plugins
maven依赖插件
复制依赖项
包裹
复制依赖项
假的
...
此配置导致依赖项被复制到${project.build.directory}/dependency
,其resolvedVersion
与maven jar插件设置到META-INF/MANIFEST.MF
中的blasspath相匹配。希望这对将来的人有所帮助。或者如果您使用的是maven shade plugin
一个解决方法是添加一个过滤器,以包含丢失的文件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
...
<configuration>
...
<filters>
...
<filter>
<artifact>com.sun.istack</artifact>
<includes>
<include>**</include>
</includes>
</filter>
org.apache.maven.plugins
maven阴影插件
3.1.0
...
...
...
com.sun.istack
**
谢谢,这让我更亲近了。我能够将dependency:copy dependencies目标添加到pom.xml文件中,以使maven自动处理复制依赖项的操作。+1表示指向maven assembly插件的链接。还有一个问题:它将DEP复制到哪里?我想它会把他们放在你的项目里?将它们从~/.m2复制到本地项目,但在本地项目tho?@AlexanderMills的何处,配置通过outputDirectory
说明目标。同样常见的还有${project.build.directory}/lib,它将所有JAR添加到一个lib`目录中。根据bug追踪器,这个问题从版本2.6开始就得到了修复。