我有一个maven项目,它是jenkins的插件。它的父级应该是:
<parent>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>plugin</artifactId>
<version>1.414</version>
</parent>
但与此同时,这个插件也可以用于hudson,而无需更改任何代码行。但它的母项目应该是:
<parent>
<groupId>org.jvnet.hudson.plugins</groupId>
<artifactId>hudson-plugin-parent</artifactId>
<version>2.0.1</version>
</parent>
我可以为此指定两个不同的配置文件,并使用它们为jenkins或hudson构建相应的插件吗?所以我称之为
mvn package -P jenkins
或
mvn package -P hudson
我曾尝试在概要文件中指定属性,但这些属性不会被<parent>
标记中的值所取代。那么,是否还有其他可能为两者构建插件,但要使用尽可能多的通用代码和文件?
添加:那么,如果我不能做到这一点,我该怎么办?如何重构?新的结构应该是什么?
如前所述,这是不可能的。此外,不可能为父版本设置属性,因为插值发生的时间比处理配置文件早得多。
我建议你创建一个主构建项目如下:
master
|-plugin-jenkins
|-plugin-hudson
|-plugin-assembly
大师应该像往常一样建造这三个。但是,在程序集中,您可以将这两个插件中的每一个作为依赖项添加到单独的配置文件中。和每个插件都可以有你喜欢的父插件。
这显然在某种程度上偏离了Maven约定,但我相信这是解决您问题的方法。
这是不可能的,因为标记"parent"在pom的概要文件部分不可用。
目前我们决定使用1个存储库和2个独立的pom.xml文件,为pom.xml提供用于构建项目的maven密钥。
mvn package -f pom-jenkins.xml
mvn package -f pom-hudson.xml
不,你不能这么做。您将不得不以某种方式进行重构以避免这种必要性。
如前所述,这是不可能的。我建议为jenkins插件和hudson插件制作单独的项目。我认为,在不久的将来,这将不再奏效,因为Hudons和Jenkins将分道扬镳。
通常,您应该能够设置{group,artifact}Id和父POM的版本,但Maven中似乎有一个Bug,只能在4.x中修复:https://issues.apache.org/jira/browse/MNG-624
另一种解决方案是将父POM的包含委托给您在relativePath元素中引用的自己的父POM,并更改目标的内容,例如通过符号链接或cp命令。
所以在主POM中,你会写:
<parent>
<groupId>org.mycompany.project</groupId>
<artifactId>foo-artifact</artifactId>
<version>1.0.0</version>
<relativePath>./my-parent.pom</relativePath>
</parent>
在我父母詹金斯身上,你会说:
<groupId>org.mycompany.project</groupId>
<artifactId>foo-artifact</artifactId>
<version>1.0.0</version>
<parent>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>plugin</artifactId>
<version>1.414</version>
</parent>
与你放在my-parent-hudson.pom.中的hudson块相同的项目信息
不,你也可以使用
ln -s my-parent-jenkins.pom my-parent.pom
或
ln -s my-parent-hudson.pom my-parent.pom
包括各自的父POM,而无需为您的项目维护两个不同的主POM文件。
如果在relativePath中引用的位置不存在POM,Maven将在远程存储库[1]中查找POM,这也是在本地覆盖父POM的一种简单方法。
[1]http://maven.apache.org/components/ref/3.3.9/maven-model/maven.html#class_parent