我有一个多模块Maven项目,模块B依赖于模块A.每当我重建模块B时,如何重建模块A?现在,我必须在对模块B做任何事情之前手动安装模块A,这真的很痛苦。
P.S。我看到其他人问了一个类似的未回答的问题: Maven: How to use jetty:run in a multi-module Maven project, without needing to install
答案 0 :(得分:1)
这可以通过两种方式解决。首先,B的POM需要包括< dependency>对于A.只要A在构建B时存储在存储库中,它就会获得正确的版本。
为了确保A在B之前构建,Maven反应器需要知道这种依赖关系。这是在具有< module>的多模块构建中完成的。元素。顶级POM设置为< packaging> pom< / packaging>它将有两个< module>元素,一个用于A,一个用于B.它们列出的顺序或深度无关紧要,如果它们可以从源项目中获得,它们将按正确的顺序构建。
请注意,没有办法尝试构建B并让Maven reactor找到A的源并检查它。反应器总是需要一个源项目,并且必须通过< module>的图形找到A和B.元素。这是因为B的构建无法判断A的存储库工件是否是最新的,它必须运行A的构建并让它弄明白。并且为了让他们同时这样做,包含这里描述的两个父项目必须是构建的源项目。
另请注意,虽然Maven对于此类多模块项目并不比Ant慢,但将Maven项目导入IDE通常会导致构建速度远远超过Maven自身执行的速度。
答案 1 :(得分:0)
使用m2eclipse在Eclipse IDE中工作,您可以在编译时以及Maven启动配置中启用工作区依赖关系管理。在这种情况下,将使用依赖项目的编译类而不是Maven本地存储库中的jar。这适用于没有定制罐子包装的常规项目。
当然,在命令行中,您可以构建和安装每个项目,也可以使用reactor项目在一次运行中构建两个项目,但这比在IDE中工作要方便得多。