我正在创建一个maven原型。在这里我有一个原型项目,当用户调用以下命令时为用户创建:
mvn archetype:generate -DarchetypeGroupId = xxx -DarchetypeArtifactId = archtype-yyyy -DarchetypeVersion = 1.1.0-S5-SNAPSHOT -DgroupId = zzz -DartifactId = proj11
在原型pom中,我想使用我在上面的命令中指定的'archetypeVersion'属性。像这样:
<dependencies>
<dependency>
<groupId>mmmm</groupId>
<artifactId>nte</artifactId>
<version>${archetypeVersion}</version>
</dependency>
这对我不起作用。创建项目时,它仍然会在生成的pom中显示与上面发布的完全相同的依赖关系片段。它不会取代它。
这可能吗? maven允许吗? 如果是,我该怎么做?
答案 0 :(得分:2)
我认为这样做的简单方法是使用maven-replacer-plugin。您必须将下一部分添加到archetype /pom.xml:
<build>
...
<plugins>
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<version>1.5.2</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals><goal>replace</goal></goals>
</execution>
</executions>
<configuration>
<file>target/classes/archetype-resources/pom.xml</file>
<replacements>
<replacement>
<token>\$\{archetypeVersion\}</token>
<value>${version}</value>
</replacement>
</replacements>
</configuration>
</plugin>
</plugins>
...
<build>
即此代码将'$ {archetypeVersion}'子串替换为当前版本的原型。您的'/src/main/resources/archetype-resources/pom.xml'包含下一个依赖项:
<dependency>
<groupId>xxxx</groupId>
<artifactId>yyyy</artifactId>
<version>${archetypeVersion}</version>
</dependency>
执行'mvn install'命令后,生成的文件'/target/classes/archetype-resources/pom.xml'将包含原型版本号。现在你已经安装了archetype并且可以使用它:'mvn archetype:generate ...'。
答案 1 :(得分:1)
我发现的最简单的方法是将它作为默认变量添加到您的 META-INF/maven/archetype-metadata.xml
中,如下所示:
<archetype-descriptor
xmlns="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0 http://maven.apache.org/xsd/archetype-descriptor-1.1.0.xsd"
name="archetypeVersionExample">
<requiredProperties>
...
<requiredProperty key="archetypeVersion">
<defaultValue>${version}</defaultValue>
</requiredProperty>
</requiredProperties>
...
</archetype-descriptor>
无需额外的插件或用户输入。