Maven原型创建:原型pom

4
我正在创建一个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是否允许这样做? 如果可以,我该如何处理?

2个回答

2

我认为做到这一点的简单方法是使用maven-replacer-plugin。您需要将下面的部分添加到原型/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”将包含原型版本号。现在您已经安装了原型,并可以使用它:“mvn archetype:generate ...”。

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>

无需额外插件或用户输入。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接