문제
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>
Thomas Marti의 답변은 올바른 방향으로 나아가는 단계이지만 더미가 필요하지 않은 간단한 접근 방식이 있습니다. <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>
상자에서 이것은 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 내부 또는 외부를 빌드하면 타임 스탬프가 올바르게 생성되어 리소스 필터링과 함께 작동합니다!
기능이 너무 단순해야한다는 것은 부끄러운 일입니다 ...
또 다른 해결책은 pom.xml 내부에서 그루비를 사용하는 것입니다 (Thomas Marti가 제안한 솔루션만큼 적절하지 않을 수도 있습니다).
<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}
이것은 나를 위해 효과가있었습니다. 내가 원했던 것은 타임 스탬프였습니다.
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>
막대 ${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 문서.
(다른 답변은 특히 Garret Wilson을 가까이하게 만들었지 만 그의 Eclipse Config는 나에게 필요하지 않았으며 그의 대답을 무시하게 만들었으므로 나에게 효과가있는 것을 정확히 게시하고 있습니다.)
A로 보너스 날짜와 시간 동안 두 개의 속성을 얻으려면 다음과 같은 방법입니다.
<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}