Увеличивайте стоимость недвижимости с Maven после каждой сборки

Это сценарий build.xmlв не maven проекте на Netbeans каждый раз, когда я "Build", он увеличивается на 1.

<target name="-pre-compile" description="Sets the buildversion for the current build">
<propertyfile file="${src.dir}\recursos\language.properties">
    <entry key="application.buildnumber" value="1" type="int" operation="+"/>
    <entry key="application.builddate" value="now" type="date"/>
</propertyfile>
</target>

Это ресурсный файл, который я использую, и я хочу, чтобы Maven тоже написал его:

application.title=Software title...
#build version control
application.buildnumber=334
application.builddate=2016/09/07 15\:16
application.version=1
application.icon=/icons/icon.png

Я уже читал о mojohaus, но, кажется, не подходит то, что мне нужно.

Я знаю, что мне нужно добавить плагин с некоторыми тегами "Выполнения / цели", но я не знаю, как сказать Maven, чтобы увеличить значение этого свойства на 1.

1 ответ

Решение

Вот как я успешно это реализовал:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0.0</version>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <id>read-props</id>
                    <goals>
                        <goal>read-project-properties</goal>
                    </goals>
                    <configuration>
                        <files>
                            <file>src/main/resources/build.properties</file>
                        </files>
                    </configuration>
                </execution>
                <execution>
                    <phase>generate-resources</phase>
                    <id>write-props</id>
                    <goals>
                        <goal>write-project-properties</goal>
                    </goals>
                    <configuration>
                        <outputFile>src/main/resources/build.properties</outputFile>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>gmaven-plugin</artifactId>
            <version>1.4</version>
            <executions>
                <execution>
                    <id>add-dynamic-properties</id>
                    <phase>initialize</phase>
                    <goals>
                        <goal>execute</goal>
                    </goals>
                    <configuration>
                        <source>
                                project.properties.buildnumber = (project.properties.buildnumber.toInteger() + 1).toString();
                        </source>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!-- debug print out, to be removed afterwards -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.5</version>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <target>
                            <echo message="${buildnumber}" />
                        </target>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Что мы на самом деле делаем:

  • Мы используем properties-maven-plugin читать файл (через его read-projet-properties цель) из файла, src/main/resources/build.properties в initialize фаза, следовательно, действительно рано в цикле сборки по умолчанию
  • Теперь buildnumber свойство было извлечено из файла и части нашей сборки. На этом же этапе мы используем gmave-plugin увеличить его значение с помощью небольшого скрипта.
  • Затем во время generate-resources фаза (в качестве примера) мы пишем новое значение buildnumber (переопределить) в тот же файл, для следующей будущей итерации. Этот шаг является основополагающим, так как нам нужно где-то хранить состояние, и оно должно находиться под контролем версий, то есть частью проекта. src/main/resources это, вероятно, не лучший выбор, поскольку он будет упакован вместе с приложением (вы всегда можете пропустить его), поэтому вы можете сохранить его в каком-то другом файле (но все же он должен быть частью версионного проекта).
  • Then, as a debug/proof, the antrun will print the current buildnumber значение.

To make it work, the initial value of the buildnumber недвижимость в build.properties file should be set a 0 (the property must exist upfront). However this file would also risk to be continuously in conflict being under version control, that's why the whole behaviour should be wrapped into a maven profile and used only in certain cases (eg the team leader during a release). This constraint would actually lead to a more standard approach: let a CI server handle the whole mechanism, not maven.

Side note: unfortunately, the properties-maven-plugin doesn't provide much configuration, it will always read and write all the build properties, which is harmless in most of the case although not optimal. Better would be to have an include/exclude mechanism to filter and only read/write the buildnumber имущество.

Другие вопросы по тегам