2015-02-02 2 views

답변

2

순수 Maven 솔루션이 없지만 Ant 태스크를 사용할 수 있다고 생각합니다.

Maven plugin developers cookbook에 제공된 지침에 따라 <tstamp> 개미 작업으로 filter.properties 파일을 생성 할 수 있습니다. 이 요소에서 SimpleDateFormat class과 동일한 날짜/시간 패턴으로 타임 스탬프를 사용자 정의하고 Timezone class을 사용할 수도 있습니다. ${build.time}을 사용하면 기본적으로 현지 시간대가 사용됩니다.

1) 해결책하지만 해결 방법이 없습니다

<resources> 
    <resource> 
    <directory>src/main/resources</directory> 
    <filtering>true</filtering> 
    </resource> 
</resources> 
<filters> 
    <filter>${basedir}/target/filter.properties</filter> 
</filters> 
0

필터링 받는다는-antrun - 플러그인

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>generate-resources</phase> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     <configuration> 
      <tasks> 
      <!-- Safety --> 
      <mkdir dir="${project.build.directory}"/> 
      <tstamp> 
       <format property="last.updated" pattern="yyyy-MM-dd HH:mm:ss"/> 
      </tstamp> 
      <echo file="${basedir}/target/filter.properties" message="build.time=${last.updated}"/> 
      </tasks> 
     </configuration> 
     </execution> 
    </executions> 
</plugin> 

2) 활성화를 사용합니다. Maven buildnumber-maven-plugin 플러그인을 사용하셨습니까? 그렇다면이를 사용하여 개정을 생성하고 타임 스탬프를 빌드 할 수 있습니다. 이 타임 스탬프는 로컬 java 표준 시간대 구성을 기반으로합니다.

편집 : 그럼에도 불구하고 질문은 timestamp인데, Dean Schulze이 지적되었으므로, 처음에만 execution${buildNumber}으로 나뉩니다. 이 문제를 해결하려면 설정에 execution을 추가해야 buildRevision이 생성됩니다. 아래에 예제를 업데이트했습니다. 예를 들어 :.`

<plugin> 
<groupId>org.codehaus.mojo</groupId> 
<artifactId>buildnumber-maven-plugin</artifactId> 
<version>1.3</version> 
<inherited>true</inherited> 
<executions> 
    <execution> 
     <id>generate-timestamp</id> 
     <phase>validate</phase> 
     <goals> 
      <goal>create</goal> 
     </goals> 
     <configuration> 
      <format>{0,date,yyyy-MM-dd HH:mm:ss Z}</format> 
      <items> 
       <item>timestamp</item> 
      </items> 
      <buildNumberPropertyName>buildDateTime</buildNumberPropertyName> 
      <getRevisionOnlyOnce>true</getRevisionOnlyOnce> 
     </configuration> 
    </execution> 
    <execution> 
     <id>generate-buildnumber</id> 
     <phase>validate</phase> 
     <goals> 
      <goal>create</goal> 
     </goals> 
     <configuration> 
      <revisionOnScmFailure>0</revisionOnScmFailure> 
      <useLastCommittedRevision>true</useLastCommittedRevision> 
      <buildNumberPropertyName>buildRevision</buildNumberPropertyName> 
     </configuration> 
    </execution> 
</executions> 

당신이 당신의 타임 스탬프 변수를 삽입 할 위치를 ${buildDateTime}을 사용할 수 있습니다보다. 동일한 목표를 가진 또 다른 실행은 리비전을 저장합니다.

+0

내가 수정 한'$ {buildNumber} ' –

+0

을 수정하고 정확한 buildRevision을 생성하는 또 다른 실행을 추가했습니다. –

12

이미 언급했듯이 현재 버전의 Maven (최소 3.3. + 이상)에서는 maven.build.timestamp 속성이 시간대 오버라이드를 허용하지 않습니다.

그러나 용도에 따라 다른 속성 이름을 사용해도 괜찮 으면 build-helper-maven-plugin을 사용하면 다양한 용도로 맞춤 타임 스탬프를 구성 할 수 있습니다. 다음은 빌드 중 EST에서 현재 시간 소인을 구성하는 예제입니다. 당신이 원하는 시간대에 빌드 타임 스탬프를 필요로하는 곳에

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>build-helper-maven-plugin</artifactId> 
      <version>1.10</version> 
      <executions> 
       <execution> 
        <id>timestamp-property</id> 
        <goals> 
         <goal>timestamp-property</goal> 
        </goals> 
        <configuration> 
         <name>build.time</name> 
         <pattern>MM/dd/yyyy hh:mm aa</pattern> 
         <locale>en_US</locale> 
         <timeZone>EST</timeZone> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

그럼 대신 ${maven.build.timestamp}${build.time} 속성을 활용할 수 있습니다.

+0

"... maven.build.timestamp 속성이 시간대 무시를 허용합니다"라고 말합니다. ** 시간대 오버라이드를 허용하지 않는다고 말씀하셨습니까? –

+0

좋은 캐치. 대답에 고정. 감사! – alexanderific

+0

:) 감사합니다. 실현하기 위해 페이지를 검색하는 동안 잠시만 걸렸습니다. –

-2

해결 방법은 필요하지 않습니다.jar 또는 war의 편집에 대한

META-INF 정보는, 특별히 Build-Date은 UTC에서 항상 것 - 그것은 시스템 시간이다.

UI에서 사용자에게 정보를 표시하는 경우 - 그의 Locale 환경 설정/설정을 사용하고 UTC 시간을 자신의 시간대로 변환하십시오.

관련 문제