0

可以mvn compile预期与多模块 Maven 反应器构建一起使用吗?

我正在尝试开发一个使用反应器/多模块 Maven 构建的项目。当mvn compile失败*时,熟悉该项目的人告诉我mvn install需要,而不是mvn compile,因为它是一个反应堆构建。

虽然 确实有效,因为 Maven 然后可以将构建依赖项从本地存储库中提取出来,但对我来说,我必须mvn install发布到存储库似乎是错误的,因为这样做会产生问题,尤其是在 CI 环境中。

然而,我能找到的几乎所有围绕多模块项目的示例都使用了mvn clean install,包括Maven by Example。我没有找到mvn compile可以归因于多模块项目的示例,这让我倾向于认为这里存在 Maven 限制/要求。

我注意到mvn compile在 Maven by Example 中提供的示例确实对我有用,但这是一个相对简单的项目,所以我知道我不能认为这意味着它应该可以正常工作。

* 它失败了,因为它找不到在 reactor 构建之前成功构建的依赖项之一。

4

4 回答 4

0

您可以使用--also-make-dependents选项。它配置 Maven 来构建项目及其依赖项。实际上,该命令会检查 reactor 中的所有项目以查找依赖于特定项目的项目。它将自动构建这些项目,仅此而已。

$ mvn --projects your-sample-project --also-make-dependents install

资源链接:Maven 提示和技巧:高级反应器选项

于 2017-12-08T18:07:43.397 回答
0

install如果您的多模块项目相互依赖,那么在其他项目可编译之前,您至少需要将这些依赖项与本地存储库建立起来,这实际上是非常合乎逻辑的。

于 2017-12-08T19:24:45.687 回答
0

正如@khmarbaise 的评论中所指出的,并通过它与 Maven By Example 示例一起使用的事实证明了这一点。 mvn compile并且mvn test可以与反应堆构建一起使用。

但是,并非所有插件都适用于这种方法。例如,制作 test-jar 的工作可能需要更改 phase

按照@khmarbaisemvn package的建议使用可能会减少这些问题,同时也避免使用or引起的问题。mvn installmvn deploy

于 2017-12-19T14:27:33.083 回答
0

对于多模块项目,我遇到了这个问题。例如,我将有一个称为base其他所有模块都依赖的模块,用于正常范围和test范围。测试范围依赖在那里,所以我可以共享通用的单元测试类和实用程序。

将在-scoped depsmvn compile上失败,并显示如下消息testCould not resolve dependencies for project com.example:zydeco:jar:0.0.1: Failure to find com.example:base:jar:tests:0.0.1

但是 using mvn test -Dmaven.test.skip.exec=true,在本质上与 相同compile,它会发现解决所有项目内测试依赖关系就好了。

如果我运行类似的东西mvn dependency:tree,它会因常规依赖而失败,并显示类似Could not resolve dependencies for project com.example:zydeco:jar:0.0.1: Failure to find com.example:base:jar:0.0.1

我同意其他人的看法,即避免package并且install是可取的 - 避免出现陈旧的代码。过去,我实际上编写了创建空/假 jar 文件的脚本,以便类似的命令mvn dependency:build-classpath可以工作。

我不确定maven是否可以解决这个问题。它在我的列表中查看sbtgradle

于 2019-02-01T20:55:48.517 回答