Maven执行dependency:build-classpath未包含当前模块自身jar包如何解决
问题原因
maven-dependency-plugin的dependency:build-classpath目标默认只会收集、输出当前模块声明的所有外部依赖路径,不会主动把当前模块打出来的my-module.jar算进类路径结果,这是插件本身的默认设计,不是配置写错了。
可行修复方案
- 直接开启插件自带的
includeSelf参数
3.0以上版本的maven-dependency-plugin原生支持这个配置项,把值设为true就会自动把当前模块的构建产物加到类路径里。直接在模块的pom.xml里加下面的配置就行:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.6.1</version> <configuration> <includeSelf>true</includeSelf> <!-- 之前配置的输出路径、路径分隔符之类的其他参数不用改,保留即可 --> </configuration> </plugin>
配完之后执行mvn package dependency:build-classpath,输出的类路径里就会带上my-module.jar的绝对路径。
旧版本插件手动拼接类路径
要是使用的插件版本在3.0以下,没有includeSelf这个参数,就先让插件把依赖列表输出到临时文件,再手动把当前模块的jar路径拼进去就行。命令行参考:# 先构建模块、把依赖列表输出到临时文件,再把自身jar路径拼到最终类路径文件最前面 mvn clean package dependency:build-classpath -Dmdep.outputFile=temp_cp.txt echo -n "target/my-module.jar:" > full_classpath.txt cat temp_cp.txt >> full_classpath.txt最后生成的
full_classpath.txt就是包含自身jar的完整运行类路径。可执行jar场景无需修改配置
如果获取类路径是为了启动my-module的程序,根本没必要把自身jar加进去:直接用java -jar my-module.jar启动就行,jar包默认会加载自己内部的类,类路径参数只需要传外部依赖列表就够了,这种场景修改插件配置属于多余操作。
注意:不管用哪种方法,都得先跑
package阶段把当前模块构建完,不然插件找不到生成好的my-module.jar,就算开了对应配置也会报路径不存在的错。
内容的提问来源于stack exchange,提问作者Mark VY
相关产品推荐
相关产品推荐

