使用Maven 3.0.4。
我的任务是为我们的组织提供公司的父母POM。我的团队将为开发人员在使用此POM时遇到的问题提供支持。他们通常会将构建日志附加到支持服务单。因此,我希望我的公司POM能够将任何版本的公司父级版本回显到控制台。我正在使用antrun插件。
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>echo-build-environment</id>
<phase>validate</phase>
<goals><goal>run</goal></goals>
<configuration>
<target>
<echo level="info" message="Maven ${maven.version}" taskname="Version" />
<echo level="info" message="Corporate POMs ${want.the.version.here}" taskname="Version" />
....
</target>
Trick是,我不知道公司父母和构建中使用的POM之间可能有多少“POM继承”级别。我们可以有一个像这样的继承结构:
corporate-parent
team-parent
application-parent
child-module
或者就这么简单:
corporate-parent
a-simple-library
我无法回显${project.version}
,因为这将是当前(子)项目的版本。我不能使用${project.parent.version}
,因为我不知道可能有多少级别的继承。我尝试定义一个<corporate.pom.version>
属性,硬编码到公司POM版本,但是当我发布我的公司POM时,发布插件不知道更新该属性(这是有道理的,它不是依赖版本,它只是一个属性,发布版本无法知道更新它。)
理想情况下,我希望能够直接通过属性获取特定POM的版本,例如${some.groupId.corporate-parent.version}
。有什么相似的吗?
如果没有,在发布期间是否有办法更新POM属性并释放项目的releaseVersion
?
我可以恢复在每次发布之前手动编辑属性的强力方式。我的队友不会欣赏这种方法。
我希望我不必编写自定义插件来做一些乍一看似乎并不困难的事情。
答案 0 :(得分:2)
我停止使用maven-antrun-plugin
并改为GMaven。我可以通过简单的POM层次结构遍历来获取所需的信息。
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<id>echo-build-environment</id>
<phase>validate</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
<![CDATA[
def rootPom = project;
while (rootPom.parent != null) {
rootPom = rootPom.parent;
}
project.properties.setProperty('root.pom.version',
rootPom.version);
log.info(" Maven Home: " + project.properties['maven.home']);
log.info(" Java Home: " + project.properties['java.home']);
log.info(" Built By User: " + project.properties['user.name']);
log.info("Corp POM Version: " + rootPom.version);
]]>
</source>
</configuration>
</execution>
</executions>
</plugin>
project.properties.setProperty
部分存储计算的属性,因此可以由子POM访问。
生成的日志如下:
[INFO] Maven Home: c:\dev\maven\apache-maven-3.0.4
[INFO] Java Home: c:\Program Files\Java\jdk1.7.0_13\jre
[INFO] Built By User: user944849
[INFO] Corp POM Version: 0.26-SNAPSHOT
答案 1 :(得分:0)
您可以使用两个插件的组合在已安装/部署的POM中实现属性扩展: - maven-resources-plugin生成pom.xml的过滤版本 - maven-install-plugin和maven-deploy-plugin使用install-file和deploy-file mojos安装/部署过滤后的POM。
例如,可以在释放程序过程中触发此过程