我有一个包含多个子项目的多模块项目,其中一个使用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了?
答案 0 :(得分:1)
将插件的pluginManagement子句添加到父项目中。
当您将<plugin/>
元素放入<pluginManagement/>
时,这意味着它在需要时提供该插件的配置,但不指示maven运行它。
您在该配置中放置<skip>${skip-android}</skip>
(假设此插件支持标准模式。
您在聚合器中将skip-android属性设置为true。
然后配置将skip-android属性设置为false的单个项目。