문제

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}

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top