Создание архетипа Maven: прототип pom

Я создаю архетип maven. В этом у меня есть проект-прототип, который создается для пользователя, когда пользователь вызывает следующую команду:

Архетип mvn: сгенерировать -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? Если да, то как я могу это сделать?


person user1342766    schedule 19.04.2012    source источник


Ответы (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…’.

person QArea    schedule 06.02.2013

Самый простой способ, который я нашел, - просто добавить его в качестве переменной по умолчанию в ваш 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>

Никаких дополнительных плагинов или входа пользователя не требуется.

person ashcradr    schedule 22.06.2021