Maven 3.2.2+에서 maven.build.timestamp
은 UTC로 시간을 표시하도록 재정의되었습니다 (MNG-5452).Maven에 maven.build.timestamp에 현지 시간대를 표시하는 방법은 무엇입니까?
시간대 정보를 UTC가 아닌 현지 시간대로 지정하는 방법이 있습니까? 간단히 maven 소스를 찾아 보았지만, TZ가 UTC 기반이 아닌 로컬 TZ가되도록 지정하는 것을 보지 못했습니다.
Maven 3.2.2+에서 maven.build.timestamp
은 UTC로 시간을 표시하도록 재정의되었습니다 (MNG-5452).Maven에 maven.build.timestamp에 현지 시간대를 표시하는 방법은 무엇입니까?
시간대 정보를 UTC가 아닌 현지 시간대로 지정하는 방법이 있습니까? 간단히 maven 소스를 찾아 보았지만, TZ가 UTC 기반이 아닌 로컬 TZ가되도록 지정하는 것을 보지 못했습니다.
순수 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>
필터링 받는다는-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}
을 사용할 수 있습니다보다. 동일한 목표를 가진 또 다른 실행은 리비전을 저장합니다.
이미 언급했듯이 현재 버전의 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}
속성을 활용할 수 있습니다.
"... maven.build.timestamp 속성이 시간대 무시를 허용합니다"라고 말합니다. ** 시간대 오버라이드를 허용하지 않는다고 말씀하셨습니까? –
좋은 캐치. 대답에 고정. 감사! – alexanderific
:) 감사합니다. 실현하기 위해 페이지를 검색하는 동안 잠시만 걸렸습니다. –
해결 방법은 필요하지 않습니다.jar
또는 war
의 편집에 대한
META-INF 정보는, 특별히 Build-Date
은 UTC에서 항상 것 - 그것은 시스템 시간이다.
UI에서 사용자에게 정보를 표시하는 경우 - 그의 Locale
환경 설정/설정을 사용하고 UTC 시간을 자신의 시간대로 변환하십시오.
내가 수정 한'$ {buildNumber} ' –
을 수정하고 정확한 buildRevision을 생성하는 또 다른 실행을 추가했습니다. –