使用 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>
诀窍是,我不知道在公司父级和构建中使用的 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}
. 有这样的东西存在吗?
如果没有,在发布期间是否有办法使用releaseVersion
正在发布的项目更新 POM 属性?
我可以恢复到在每次发布之前手动编辑属性的蛮力方式。我的队友不会欣赏这种方法。
我希望我不必编写自定义插件来做一些乍一看似乎并不困难的事情。