前几天我在Maven邮件列表上问了上面的问题,并得到了风滚草。幸运的是,我终于明白了自己的想法。至少有一种方法可以实现这一点:
对您的src/main/resources/archetype-resources/pom.xml
文件使用Maven过滤,以在构建原型时替换当前项目版本。
下面是如何这样做了:
修改您的archetype/pom.xml
文件,以使在archetype-resources/pom.xml
文件,而不是别的过滤(因为你的原型文件,自然会${variable}
一切都在地方,你不希望这些在构建时被替换,你希望它们在创建原型时被替换)。
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>archetype-resources/pom.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>archetype-resources/pom.xml</exclude>
</excludes>
</resource>
</resources>
过滤时启用使用转义字符,这样就可以逃避一切都在你的原型POM需要保持原样,使他们能够在原型生成时间被替换的变量:
<pluginManagement>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<escapeString>\</escapeString>
</configuration>
</plugin>
</plugins>
</pluginManagement>
(注意上面显示的<resources>
和<pluginManagement>
元素应放置在POM的<build>
元素中。)
使用${project.version}
在你的原型POM,在那里你要插入你的原型项目的版本,和逃避所有其他变量应保持取代的,直到原型生成时间:
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>\${groupId}</groupId>
<artifactId>\${artifactId}</artifactId>
<version>\${version}</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.foo</groupId>
<artifactId>origin-core</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
正是我所需要的。非常感谢。 –
工程就像一个魅力!谢谢。 – Malvin
这是如此甜蜜,优秀的职位。 – ocarlsen