Добавление текущей даты с помощью фильтрации Maven2
Вопрос
У меня есть проект Maven2, и мне нужно добавить в файл свойств текущую версию и текущую дату.
Для текущей версии я использовал ${project.version}
, который работает корректно.
Мой вопрос в том, как я могу установить текущую дату (т. е.дата завершения сборки с помощью Maven2) в моем файле свойств:
client.version=Version ${project.version}
client.build=???
(кроме того, если я смогу указать формат даты, это будет действительно здорово)
Решение
Вы можете использовать Плагин Maven Buildnumber для сборки для этого:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<timestampFormat>{0,date,yyyy-MM-dd HH:mm:ss}</timestampFormat>
</configuration>
</plugin>
</plugins>
</build>
Затем дата доступна в свойстве ${BuildNumber}.
Другие советы
Функция не работает с фильтрацией ресурсов maven 2.2.1.
Видишь: https://issues.apache.org/jira/browse/MRESOURCES-99
Но вы могли бы создать пользовательское свойство в родительском pom:
<properties>
<maven.build.timestamp.format>yyMMdd_HHmm</maven.build.timestamp.format>
<buildNumber>${maven.build.timestamp}</buildNumber>
</properties>
Где BuildNumber - это новое свойство, которое может быть отфильтровано по ресурсам.
Начиная с Maven 2.1 M1, теперь вы можете сделать ${maven.build.timestamp}
при условии, что вы также определите ${maven.build.timestamp.format}
<properties>
...
<maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
...
</properties>
Ответ Томаса Марти - это шаг в правильном направлении, но есть более простой подход, который не требует манекена <scm>
декларация в ПОМ.Используйте buildnumber-maven-plugin
, но используйте create-timestamp
цель.Документация не совсем понятна;вот как это выглядит, чтобы назначить свидание в YYYY-MM-DD
отформатируйте и поместите его в build.date
собственность:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create-timestamp</goal>
</goals>
</execution>
</executions>
<configuration>
<timestampFormat>yyyy-MM-dd</timestampFormat>
<timestampPropertyName>build.date</timestampPropertyName>
</configuration>
</plugin>
Из коробки это не будет работать в Eclipse с m2e, поэтому вам придется добавить следующее внутри POM <build>
Раздел:
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<versionRange>[1.2,)</versionRange>
<goals>
<goal>create-timestamp</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnConfiguration>true</runOnConfiguration>
<runOnIncremental>true</runOnIncremental>
</execute>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
Это говорит m2e о том, что вы хотите, чтобы он продолжил и запустил плагин при сборке в Eclipse.
Теперь, когда вы создаете внутри или за пределами Eclipse, временная метка генерируется правильно и работает с фильтрацией ресурсов!
Жаль, что такая простая функциональность должна быть такой сложной...
Другое решение - использовать Groovy внутри pom.xml (возможно, не такое правильное, как решение, предложенное Томасом Марти):
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.codehaus.groovy.maven</groupId>
<artifactId>gmaven-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
import java.util.Date
import java.text.MessageFormat
def vartimestamp = MessageFormat.format("{0,date,yyyyMMdd-HH:mm:ss}", new Date())
project.properties['buildtimestamp'] = vartimestamp
</source>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
а затем используйте buildtimestamp
собственность:
client.version=${pom.version}
client.build=${buildtimestamp}
У меня это сработало.Все, что мне было нужно, - это временная метка.
В пом...
<properties>
<maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
<dev.build.timestamp>${maven.build.timestamp}</dev.build.timestamp>
</properties>
...
<overlay>
<groupId>mystuff</groupId>
<artifactId>mystuff.web</artifactId>
<filtered>true</filtered>
</overlay>
И в файле JSP...
<div>Built: ${dev.build.timestamp}</div>
Пример результата таков...
<div>Built: 20130419-0835</div>
Палка ${build.time}
в файле свойств и следующем в pom.xml
:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.3</version>
<configuration>
<timestampFormat>yyyy-MM-dd HH:mm:ss</timestampFormat>
<timestampPropertyName>build.time</timestampPropertyName>
</configuration>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>create-timestamp</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Также смотрите документация buildnumber-maven-plugin.
(Другие ответы меня заинтересовали, особенно Гаррет Уилсон, но его конфигурация eclipse мне была не нужна, и это заставило меня проигнорировать его ответ, поэтому я публикую именно то, что сработало для меня.)
В качестве бонус если вы хотите получить два свойства, одно для даты и одно для времени, вот как вы это делаете:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>build.date</id>
<phase>initialize</phase>
<goals>
<goal>create-timestamp</goal>
</goals>
<configuration>
<timestampFormat>yyyy-MM-dd</timestampFormat>
<timestampPropertyName>build.date</timestampPropertyName>
</configuration>
</execution>
<execution>
<id>build.time</id>
<phase>initialize</phase>
<goals>
<goal>create-timestamp</goal>
</goals>
<configuration>
<timestampFormat>yyyy-MM-dd HH:mm:ss</timestampFormat>
<timestampPropertyName>build.time</timestampPropertyName>
</configuration>
</execution>
</executions>
</plugin>
для меня это работа в maven 2.1.0
${maven.build.timestamp}