问题:Lib目录未加入最终项目Jar包,Maven依赖插件配置无效
解决Maven打包时Lib目录未加入Jar包的问题
我来帮你一步步排查和解决这个问题~你配置的maven-dependency-plugin是用来把依赖复制到target/classes/lib,但最终Jar里没包含这个目录,大概率是两个环节出了问题:要么依赖没成功复制到指定目录,要么打包插件没把这个目录包含进去。
第一步:验证依赖是否成功复制到目标目录
先运行mvn clean prepare-package命令,然后去项目的target/classes/lib目录看看:
- 如果这个目录是空的或者不存在,说明
maven-dependency-plugin没正常执行,检查以下几点:- 插件的
groupId和artifactId是否正确(你写的配置没问题,但可以确认下有没有拼写错误) - 执行阶段
prepare-package是否正确,这个阶段确实在package之前执行,也可以尝试换成compile阶段试试 - 有没有其他插件的
execution和这个插件的id(copy-dependencies)冲突?可以改个唯一的id试试
- 插件的
第二步:如果依赖已复制,确保打包插件包含Lib目录
如果target/classes/lib已经有依赖Jar,但最终Jar里没有,那需要检查打包插件的配置:
情况1:使用默认的maven-jar-plugin
默认情况下,maven-jar-plugin会把target/classes下的所有内容打包到Jar里,但如果你的项目有自定义的includes/excludes配置,可能把lib目录排除了。可以显式添加包含规则:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <includes> <include>**/*.class</include> <include>lib/**/*</include> </includes> </configuration> </plugin>
情况2:使用maven-assembly-plugin构建可执行Jar
如果你是要打包包含依赖的可执行Jar,更推荐用maven-assembly-plugin,它可以更灵活地控制打包内容,同时配置类路径指向lib目录:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <executions> <execution> <id>package-with-deps</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <archive> <manifest> <!-- 替换成你的主类全路径 --> <mainClass>com.yourcompany.YourMainClass</mainClass> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <includes> <include>**/lib/**</include> </includes> </configuration> </execution> </executions> </plugin>
情况3:使用maven-shade-plugin
如果用的是shade插件打包,需要配置显式包含lib目录:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <includes> <include>lib/**/*</include> </includes> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.yourcompany.YourMainClass</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin>
最后验证
运行mvn clean package,然后解压生成的Jar包,看看根目录下是否有lib目录,里面有没有依赖Jar。如果还是不行,可以检查项目的.gitignore或者其他maven配置文件有没有排除lib目录的规则哦~
内容的提问来源于stack exchange,提问作者Ashwani Sharma
相关产品推荐
相关产品推荐

