Я задал вышеупомянутый вопрос в списке рассылки 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>
и <pluginManagement>
, показанные выше, должны быть размещены внутри элемента <build>
вашего POM.)
Используйте ${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>