Добавление текущей даты с фильтрацией Maven2
У меня есть проект Maven2, и мне нужно добавить в файл свойств текущую версию и текущую дату.
В текущей версии я использовал ${project.version}
, который работает правильно.
Мой вопрос: как установить текущую дату (например, дату, когда сборка выполняется Maven2) в моем файле свойств:
client.version=Version ${project.version}
client.build=???
(кроме того, если я могу указать формат даты, это будет действительно здорово)
Ответы
Ответ 1
Для этого вы можете использовать плагин 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}.
Ответ 2
Функция не работает с фильтрацией ресурсов 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 - это новое свойство, которое может быть отфильтровано в ресурсы.
Ответ 3
Так как Maven 2.1 M1, вы можете сделать ${maven.build.timestamp}
, если вы также определяете ${maven.build.timestamp.format}
<properties>
...
<maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
...
</properties>
Ответ 4
Ответ Томаса Марти - это шаг в правильном направлении, но есть более простой подход, который не требует объявления фиктивного <scm>
в POM. Используйте 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, метка времени создается правильно и работает с фильтрацией ресурсов!
Позор, который так просто прост, так сложно...
Ответ 5
Другим решением является использование 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}
Ответ 6
Это сработало для меня. Все, что я хотел, это отметка времени.
В pom...
<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>
Ответ 7
Придерживайтесь ${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.
(Другие ответы заставили меня закрыть, особенно Гаррет Уилсон, но его конфигурация затмения не была необходима для меня, и это заставило меня игнорировать его ответ, поэтому я отправляю именно то, что сработало для меня.)
Как бонус, если вы хотите получить два свойства: один для даты и один для времени, вот как вы это делаете:
<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>
Ответ 8
он работает для меня на maven 2.1.0
${maven.build.timestamp}