Maven原型创作:原型pom

时间:2012-04-19 00:50:37

标签: maven maven-archetype

我正在创建一个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 个答案:

答案 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>

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