`mvn compile` 是否可以与多模块 Maven 反应器构建一起使用?
Can `mvn compile` be expected to work with multi-module Maven reactor builds?
mvn compile
能否与多模块 Maven 反应器构建一起工作?
我正在尝试使用 reactor/multi-module Maven 构建的项目。当mvn compile
failed*的时候,项目熟悉的人告诉我需要mvn install
,而不是mvn compile
,因为它是反应堆构建。
虽然 mvn install
确实有效,因为 Maven 然后可以将构建依赖项从本地存储库中拉出,但对我来说,我 必须 发布到存储库似乎是错误的,因为这样做会产生问题,尤其是在 CI 环境中。
但是,我能找到的几乎所有围绕多模块项目的示例都使用 mvn clean install
,包括 Maven by Example。我没有找到可以归因于多模块项目的 mvn compile
示例,这让我倾向于认为这里有一个 Maven limitation/requirement。
我注意到 mvn compile
确实为我提供了 Maven by Example 中提供的示例,但这是一个相对简单的项目,所以我知道我不能认为这意味着它应该在一般情况下工作。
* 它失败了,因为它找不到在 reactor 构建之前成功构建的依赖项之一。
您可以使用 --also-make-dependents
选项。它配置 Maven 来构建项目及其依赖项。实际上,该命令会检查 reactor 中的所有项目以查找依赖于特定项目的项目。它会自动构建这些项目,仅此而已。
$ mvn --projects your-sample-project --also-make-dependents install
如果您的多模块项目相互依赖,那么您需要至少 install
这些依赖关系到您的本地存储库,然后才能编译其他项目,这实际上是很合乎逻辑的。
如 中所示,并通过它与 Maven By Example 示例一起工作的事实证明。 mvn compile
和 mvn test
可以使用 reactor 构建。
但是,并非所有插件都适用于这种方法。例如,making test-jar's work can require changing the phase.
按照 @khmarbaise 的建议使用 mvn package
可能会大大减少这些问题,同时还能避免使用 mvn install
或 mvn deploy
引起的问题。
我已经 运行 解决了多模块项目的这个问题。例如,对于正常范围和 test
范围,我将有一个名为 base
的模块,每个其他模块都依赖该模块。测试范围依赖性在那里,所以我可以共享通用单元测试 类 和实用程序。
mvn compile
将在 test
范围的 deps 上失败,并显示类似 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
是可取的 - 避免陈旧的代码随处可见。过去,我实际上编写了创建 empty/fake jar 文件的脚本,以便
mvn dependency:build-classpath
之类的命令可以工作。
我不确定 Maven 是否能解决这个问题。在我的列表中查看 sbt
和 gradle
.
mvn compile
能否与多模块 Maven 反应器构建一起工作?
我正在尝试使用 reactor/multi-module Maven 构建的项目。当mvn compile
failed*的时候,项目熟悉的人告诉我需要mvn install
,而不是mvn compile
,因为它是反应堆构建。
虽然 mvn install
确实有效,因为 Maven 然后可以将构建依赖项从本地存储库中拉出,但对我来说,我 必须 发布到存储库似乎是错误的,因为这样做会产生问题,尤其是在 CI 环境中。
但是,我能找到的几乎所有围绕多模块项目的示例都使用 mvn clean install
,包括 Maven by Example。我没有找到可以归因于多模块项目的 mvn compile
示例,这让我倾向于认为这里有一个 Maven limitation/requirement。
我注意到 mvn compile
确实为我提供了 Maven by Example 中提供的示例,但这是一个相对简单的项目,所以我知道我不能认为这意味着它应该在一般情况下工作。
* 它失败了,因为它找不到在 reactor 构建之前成功构建的依赖项之一。
您可以使用 --also-make-dependents
选项。它配置 Maven 来构建项目及其依赖项。实际上,该命令会检查 reactor 中的所有项目以查找依赖于特定项目的项目。它会自动构建这些项目,仅此而已。
$ mvn --projects your-sample-project --also-make-dependents install
如果您的多模块项目相互依赖,那么您需要至少 install
这些依赖关系到您的本地存储库,然后才能编译其他项目,这实际上是很合乎逻辑的。
如 mvn compile
和 mvn test
可以使用 reactor 构建。
但是,并非所有插件都适用于这种方法。例如,making test-jar's work can require changing the phase.
按照 @khmarbaise 的建议使用 mvn package
可能会大大减少这些问题,同时还能避免使用 mvn install
或 mvn deploy
引起的问题。
我已经 运行 解决了多模块项目的这个问题。例如,对于正常范围和 test
范围,我将有一个名为 base
的模块,每个其他模块都依赖该模块。测试范围依赖性在那里,所以我可以共享通用单元测试 类 和实用程序。
mvn compile
将在 test
范围的 deps 上失败,并显示类似 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
是可取的 - 避免陈旧的代码随处可见。过去,我实际上编写了创建 empty/fake jar 文件的脚本,以便
mvn dependency:build-classpath
之类的命令可以工作。
我不确定 Maven 是否能解决这个问题。在我的列表中查看 sbt
和 gradle
.