2009-08-03 33 views
29

Tôi đang nâng cấp một xây dựng hệ thống lớn để sử dụng Maven2 thay vì Ant, và chúng tôi có hai yêu cầu liên quan mà tôi đang mắc kẹt trên:Làm cách nào để thêm thông tin đóng dấu thời gian vào các tạo tác Maven?

  1. Chúng ta cần phải tạo ra một tạo tác thời gian đóng dấu, do đó, một phần của gói giai đoạn (hoặc bất cứ nơi nào), thay vì xây dựng

    project-1.0-SNAPSHOT.jar 
    

    chúng tôi nên được xây dựng

    project-1.0-20090803125803.jar 
    

    (trong đó 20090803125803 chỉ là một dấu thời gian YYYYMMDDHHMMSS khi bình được xây dựng ).

    Yêu cầu thực sự duy nhất là dấu thời gian là một phần của tên tệp của tệp được tạo ra .

  2. Dấu thời gian giống nhau phải được bao gồm trong một phiên bản phiên bản.properties bên trong bình được tạo.

Thông tin này được đưa vào tạo pom.properties khi bạn chạy, ví dụ mvn package nhưng là nhận xét ra:

#Generated by Maven 
#Mon Aug 03 12:57:17 PDT 2009 

Bất kỳ ý tưởng về bắt đầu từ đâu sẽ là hữu ích! Cảm ơn!

Trả lời

34

Phiên bản Maven 2.1.0-M1 hoặc mới hơn đã được tạo trong biến đặc biệt maven.build.timestamp.

<build> 
    <finalName>${project.artifactId}-${project.version}-${maven.build.timestamp}</finalName> 
</build> 

Xem Maven documentation để biết thêm chi tiết.


Để xem phiên bản Maven cũ hơn, hãy xem maven-timestamp-plugin hoặc buildnumber-maven-plugin.

Nếu bạn sử dụng plugin maven-timestamp, bạn có thể sử dụng một cái gì đó như thế này để thao tác tên tạo tác kết quả.

<build> 
    <finalName>${project.artifactId}-${project.version}-${timestamp}</finalName> 
</build> 

Và cấu hình này cho plugin xây dựng-maven sẽ tạo thuộc tính $ {timestamp} chứa giá trị dấu thời gian. Dường như không phải là cách để tạo tệp trực tiếp version.properties với plugin này.

<configuration> 
    <format>{0,date,yyyyMMddHHmmss}</format> 
    <items> 
     <item>timestamp</item> 
    </items> 

</configuration> 

These threesites cũng đáng để thử qua.

+1

Bạn có thể tạo tệp version.properties của mình bằng cách đưa nó ra trong/src/main/resources và sử dụng tính năng lọc. Sau đó, sử dụng thuộc tính $ {timestamp} trong bộ lọc. Bí quyết sẽ nhận được thuộc tính $ {timestamp} được tạo trước khi các bộ lọc được áp dụng. –

+3

Chỉ trong trường hợp một số tình trạng lộn xộn trên câu trả lời cũ như tôi: Nó bây giờ được xây dựng trong: http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables – Jan

+1

@Jan tôi đã cập nhật câu trả lời. –

2

Khi dự án SNAPSHOT được triển khai, theo mặc định, dấu thời gian được sử dụng trừ khi bạn ghi đè nó trong deploy plugin. Nếu bạn không nhận được dấu thời gian duy nhất, nó có thể là một cấu hình của kho lưu trữ Maven của bạn. Tuy nhiên, như câu trả lời khác, hãy sử dụng plugin dấu thời gian hoặc trình xây dựng cho các bản phát hành.

38

Nếu bạn sử dụng phiên bản Maven> = 2.1.0-M1, thì bạn có thể sử dụng thuộc tính $ {maven.build.timestamp}.

Mọi chi tiết, xem: http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables

+2

Tôi thích cái này vì không cần plugin. – Xorty

+0

Nếu bạn sử dụng maven-war-plugin, hãy thêm cấu hình này vào cấu hình: ' ... $ {project.name} - $ {project.version} _ $ {maven.build.timestamp} ' – fl4l

+3

Điều này sẽ luôn dẫn đến thời gian ở định dạng UTC, nếu bạn muốn thời gian trong múi giờ khác sử dụng plugin' build-helper-maven-plugin': Tìm kiếm * múi giờ * trong [http://mojo.codehaus.org/ build-helper-maven-plugin/usage.html] (http://mojo.codehaus.org/build-helper-maven-plugin/usage.html). – lmiguelmh

13

Nếu bạn cần nhiều thời gian trong một múi giờ khác hơn là UTC (mặc định khi bạn sử dụng ${maven.build.timestamp}), bạn có thể sử dụng build-helper-maven-plugin. Xem thêm trong Brief examples on how to use the Build Helper Maven Plugin's goals.

Dù sao, đây là cách tôi đã có timestamp trong GMT-5 và đặt nó trong tên cuối cùng của tạo tác của tôi:

<build> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>build-helper-maven-plugin</artifactId> 
       <version>1.9.1</version> 
       <executions> 
        <execution> 
         <id>timestamp-property</id> 
         <goals> 
          <goal>timestamp-property</goal> 
         </goals> 
         <configuration> 
          <name>current.time</name> 
          <pattern>yyyyMMdd-HHmmss</pattern> 
          <timeZone>GMT-5</timeZone> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <finalName>${project.name}-${current.time}</finalName> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
7

bài này (đặc biệt là phần dưới đây) cũng rất hữu ích và thiết thực cho vấn đề này.

Stamping Version Number and Build Time in a Properties File with Maven

Các pom sẽ trông như thế này

... 
<properties> 

     .... 

     <!-- Timestamp of build --> 
     <timestamp>${maven.build.timestamp}</timestamp> 
     <maven.build.timestamp.format>yyyy_MM_dd_HH_mm</maven.build.timestamp.format> 

</properties> 

... 

<build> 
     <finalName>${project.artifactId}_${project.version}_${timestamp}</finalName> 

     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       .... 
      </plugin> 
     </plugins> 
</build> 
.... 

và tên gói là MyProject_1.0_2015_03_02_13_46.war

Các vấn đề liên quan