Есть ли способ интерполировать все переменные ${project.version} в Maven pom.xml ?

#maven #jgitver #flatten-maven-plugin

#maven #jgitver #сгладить-maven-плагин

Вопрос:

Мне нужно заменить все вхождения ${project.version} на реальное значение в pom.xml .

Я могу сделать это с maven-flatten-plugin , но это перепишет все pom.xml вместо простой замены project.version only.

Поскольку я хочу использовать jgitver-maven-plugin я не могу использовать resolveCiFriendliesOnly режим плагина flatten.

Есть ли простой способ заменить только одну переменную во всем pom.xml ? Есть ли другая (скрытая) опция в плагине flatten для этого?

Комментарии:

1. Вы пытаетесь заменить содержимое переменной или фактическую версию POM, как <version>1</version> , на что-то другое?

Ответ №1:

Вы можете использовать плагин выпуска maven, в частности, цель обновления версий.

пример: mvn — выпуск в пакетном режиме: обновление версий -DdevelopmentVersion=1.2.0-СНИМОК

https://maven.apache.org/maven-release/maven-release-plugin/examples/update-versions.html

Ответ №2:

Есть что-то близкое к тому, чего вы хотите достичь, но может быть достаточно хорошим. Однако это разрешит все переменные в разделах POM по вашему выбору.

Я использовал resolveCiFriendliesOnly , поскольку это единственный режим, который сохраняет исходный POM.

     <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>flatten-maven-plugin</artifactId>
                <version>1.2.2</version>
                <configuration>
                    <flattenMode>resolveCiFriendliesOnly</flattenMode>
                    <pomElements>
                        <dependencyManagement>resolve</dependencyManagement>
                        <!-- add more sections to resolve -->
                    </pomElements>
                </configuration>
                <executions>
                    <execution>
                        <id>flatten</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>flatten</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
  

Теперь вы можете добавить дополнительные разделы под <pomElements> , где вы хотите разрешить переменные.
В качестве побочного эффекта resolveCiFriendliesOnly переменные ${revision} , ${sha1} и ${changelist} будут разрешены во всем файле POM.

Имейте в виду, что flatten-maven-plugin ваш POM все равно будет переписан, т. Е. вы можете изменить порядок разделов, потерять комментарии, отступы и т.д.

Вот список разделов, которые вы можете настроить: https://www.mojohaus.org/flatten-maven-plugin/apidocs/org/codehaus/mojo/flatten/FlattenDescriptor.html

Если resolveCiFriendliesOnly ваш POM все еще портит работу, вы можете удалить flattenMode , но тогда он выйдет из строя, и вы должны добавить почти все возможные разделы в опцию <pomElements> with keep , например

 <pomElements>
    <dependencyManagement>resolve</dependencyManagement>
    <!-- keep everything else -->
    <parent>keep</parent>
    <build>keep</build>
    <distributionManagement>keep</distributionManagement>
    <repositories>keep</repositories>
    <pluginRepositories>keep</pluginRepositories>
    <profiles>keep</profiles>
    ...
</pomElements>