预计`mvn compile`是否可以与多模块Maven反应堆构建一起使用?

时间:2017-12-08 17:49:53

标签: java maven maven-reactor

是否可以mvn compile使用多模块Maven反应堆构建?

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

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

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

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

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

4 个答案:

答案 0 :(得分:0)

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

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

资源链接:Maven Tips and Tricks: Advanced Reactor Options

答案 1 :(得分:0)

如果您的多模块项目之间存在相互依赖性,那么在其他项目可编译之前,您需要至少install这些依赖项到本地存储库是非常合乎逻辑的。

答案 2 :(得分:0)

@khmarbaise's comment中所示,并通过它与Maven By Example示例一起使用的事实证明了这一点。 mvn compilemvn test可用于反应堆构建。

但是,并非所有插件都适用于此方法。例如,making test-jar's work can require changing the phase

根据@khmarbaise的建议使用mvn package可能会减少这些问题,同时避免因使用mvn installmvn deploy而导致的问题。

答案 3 :(得分:0)

我在多模块项目中遇到了这个问题。例如,对于正常作用域和base作用域,我将有一个名为test的模块,每个其他模块都依赖该模块。存在测试范围依赖关系,因此我可以共享常见的单元测试类和实用程序。

mvn compile范围内的部门,test将失败,并显示类似Could not resolve dependencies for project com.example:zydeco:jar:0.0.1: Failure to find com.example:base:jar:tests:0.0.1的消息

但是使用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的消息

我与其他人一样,避免使用packageinstall是可取的-避免使用陈旧的代码。过去,我实际上已经编写了创建空/假jar文件的脚本,以便 mvn dependency:build-classpath之类的命令可以使用。

我不确定Maven是否可以解决这个问题。可以查看sbtgradle