0

我有一个多模块 maven 项目,我们在其中遮蔽 Google 的 Guava 以将包重新定位到我们的包树中,这样我们就不必担心版本冲突。我知道这是一种相当普遍的做法。

构建 jar 就像构建系统一样工作正常。但是,在 Maven 中执行 site:site 目标时,它会调用 compiler:testCompile ,此时找不到重定位的类。让我指出,早期的 testCompile 工作得很好。

我怀疑这是因为 maven 着色项目是失败的项目的对等项目,并且在第二次 testCompile 执行期间,它找到了着色项目,查找并找不到要编译的类,因此死亡。在目标目录中有一个正确命名的阴影 jar,它确实包含正在查找的类。

我想我想知道的是:是否有一种机制告诉 maven 在子模块中查找 jar(源从未存在于那里)并跳过编译的类?我想作为最后的手段,我可​​以将刚刚构建的 jar 的内容提取到 target/classes 目录中,以便可以找到它们。

任何援助将不胜感激。

4

1 回答 1

0

我们过去也遇到过同样的问题。最后为着色人工制品和其他模块提供了一个单独的发布周期,而它们被保存在同一个 repo 中:

/pom.xml - root for all child modules, except the shaded one
/shaded/pom.xml - no ref to parent (no <parent> section), own release cycle
/module1/pom.xml - explicit ref to released version of shaded artefact
...
/moduleN/pom.xml

在 IDE中/pom.xml,这些文件被作为单独的项目/shaded/pom.xml导入。

这在以后变得更加有用,因为实际上一年只发生几次重新构建阴影模块。

于 2019-09-27T22:37:57.663 回答