Maven多模块先将一个模块着色,然后再在另一个模块中使用

时间:2019-04-02 07:27:28

标签: maven-3 maven-shade-plugin multi-project

我有一个多模块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.

1 个答案:

答案 0 :(得分:1)

更新似乎没有一种干净的方法。

在两者之间进行着色的新Maven模块之间插入。将shade附加到此模块的阶段test中。不要忘记依赖新模块。

mvn test的代码失败,因为它不会创建任何JAR,因此不会调用Shade插件。

您可能会想在现有模块中将Shade的运行阶段更改为generate-test-resourcestest,但是如果以后发生某些情况,可能会导致其他问题Maven lifecycle的阶段。这就是为什么我建议创建一个没有其他副作用的新模块。