几天前我在 Maven 邮件列表上问了上述问题,得到了风滚草。幸运的是,我最终自己想通了。这里至少有一种理智的方法可以做到这一点:
在构建原型时,对您的文件使用 Maven 过滤src/main/resources/archetype-resources/pom.xml
以替换当前项目版本。
这是如何完成的:
修改您的archetype/pom.xml
文件以启用对archetype-resources/pom.xml
文件而不是其他任何内容的过滤(因为您的原型文件自然会到处都有${variable}
s 并且您不希望在构建时替换它们,您希望它们在原型时被替换被建造)。
<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>
and<pluginManagement>
元素应该放在<build>
你的 POM 的元素中。)
在您的原型 pom 中使用${project.version}
,您希望在其中插入原型项目的版本,并转义在原型生成时间之前应该保持未被替换的所有其他变量:
<?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>