我有一个多模块Maven构建,其中一个模块遮蔽了一个库,另一个模块使用了共享库。
如果我运行mvn test
,则结果为package com.example.shaded.javax.el7 does not exist
。
如果我运行mvn package test
,则编译和测试通过。
因此,我希望着色模块不仅可以编译,还可以在编译依赖模块之前运行maven-shade-plugin:3.2.1:shade
进行着色(打包)。
是否可以在pom.xml的maven中引入这样的目标依赖项?
将shade插件绑定到软件包以外的其他阶段会产生此错误消息:
[ERROR] The project main artifact does not exist. This could have the following
[ERROR] reasons:
[ERROR] - You have invoked the goal directly from the command line. This is not
[ERROR] supported. Please add the goal to the default lifecycle via an
[ERROR] <execution> element in your POM and use "mvn package" to have it run.
[ERROR] - You have bound the goal to a lifecycle phase before "package". Please
[ERROR] remove this binding from your POM such that the goal will be run in
[ERROR] the proper phase.
答案 0 :(得分:1)
更新似乎没有一种干净的方法。
在两者之间进行着色的新Maven模块之间插入。将 shade
附加到此模块的阶段test
中。不要忘记依赖新模块。
mvn test
的代码失败,因为它不会创建任何JAR,因此不会调用Shade插件。
您可能会想在现有模块中将Shade的运行阶段更改为 generate-test-resources
或test
,但是如果以后发生某些情况,可能会导致其他问题Maven lifecycle的阶段。这就是为什么我建议创建一个没有其他副作用的新模块。