几天前,我在Maven邮件列表中问了上述问题,并得到了风滚草。幸运的是,我最终自己想通了。以下是至少一种合理的方法来实现这一目标:
在构建原型时,对文件使用 Maven 筛选以替换当前项目版本。src/main/resources/archetype-resources/pom.xml
这是如何完成的:
修改您的文件以启用对文件的过滤,而不是对其他任何内容的过滤(因为您的原型文件自然会到处都是,并且您不希望在构建时替换它们,您希望在创建原型时替换它们)。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>
(请注意,上面显示的 和 元素应放置在 POM 的元素内。<resources>
<pluginManagement>
<build>
在原型 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>