Maven是多模块项目的目标

时间:2011-10-25 10:17:20

标签: maven

我有一个包含多个子项目的多模块项目,其中一个使用maven android插件:

                  +-------------+ 
                  | Aggregator  |
                  |    Module   |
                  +-------------+ 

+-------------+   +-------------+   +-------------+ 
|  Module 1   |   |  Module 2   |   |  Module 3   |
|  (android)  |   |             |   |             |
+-------------+   +-------------+   +-------------+ 

我经常从第1单元运行以下命令:

module-1 $ mvn clean install android:redeploy

这很好用,因为模块1在其pom中声明了android插件。

能够运行相同的命令对我来说很方便,例如。来自Aggregator模块的mvn clean install android:redeploy,并且maven知道它应该在所有子模块中运行“clean”和“install”,并且只在支持它的模块中运行“android:redeploy”,即第1单元。

相反,当我尝试从聚合器模块运行命令时,我收到一条错误,上面写着“错误解析插件的版本”,这是有道理的,因为它尚未在聚合器中声明,实际上并不会在聚合器中声明是有意义的。

我是否有一种聪明的方法可以将我的模块配置为在这种情况下“做正确的事情”,这样我就不必在两个单独的目录中运行maven了?

1 个答案:

答案 0 :(得分:1)

将插件的pluginManagement子句添加到父项目中。

当您将<plugin/>元素放入<pluginManagement/>时,这意味着它在需要时提供该插件的配置,但不指示maven运行它。

您在该配置中放置<skip>${skip-android}</skip>(假设此插件支持标准模式。

您在聚合器中将skip-android属性设置为true。

然后配置将skip-android属性设置为false的单个项目。