是否可以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构建中成功构建的依赖项之一。
答案 0 :(得分:0)
您可以使用--also-make-dependents
选项。它配置Maven来构建项目及其依赖项。实际上,该命令检查reactor中的所有项目,以查找依赖于特定项目的项目。它将自动构建这些项目,而不是别的。
$ mvn --projects your-sample-project --also-make-dependents install
答案 1 :(得分:0)
如果您的多模块项目之间存在相互依赖性,那么在其他项目可编译之前,您需要至少install
这些依赖项到本地存储库是非常合乎逻辑的。
答案 2 :(得分:0)
如@khmarbaise's comment中所示,并通过它与Maven By Example示例一起使用的事实证明了这一点。 mvn compile
和mvn test
可用于反应堆构建。
但是,并非所有插件都适用于此方法。例如,making test-jar's work can require changing the phase。
根据@khmarbaise的建议使用mvn package
可能会减少这些问题,同时避免因使用mvn install
或mvn 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
的消息
我与其他人一样,避免使用package
和install
是可取的-避免使用陈旧的代码。过去,我实际上已经编写了创建空/假jar文件的脚本,以便
mvn dependency:build-classpath
之类的命令可以使用。
我不确定Maven是否可以解决这个问题。可以查看sbt
和gradle
。