2010-11-02 2 views
10

Я пытаюсь выяснить, есть ли у Maven встроенный плагин, который можно использовать для артефактов с меткой времени. Я создал файл сборки и использую плагин maven-assembly, чтобы создать окончательный дистрибутив (банки, документы, скрипты и т. Д.). Я хочу назвать этот файл распространения как domain_year_month_day.zip. Как я могу добавить дневную часть временной метки к концу последнего файла zip, который создается. Благодарю.Как помечать выходной артефакт в Maven?

ответ

8

Вы можете использовать maven-timestamp-plugin, чтобы установить свойство (например, timestamp) и использовать его позже в конечном имени вашей сборки.

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>create-assembly</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <appendAssemblyId>false</appendAssemblyId> 
       <finalName>domain_${timestamp}</finalName> 
       <descriptors> 
        <descriptor>src/main/assembly/my-descriptor.xml</descriptor> 
       </descriptors> 
       <attach>true</attach> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

В качестве альтернативы, вы могли бы поставить некоторые Groovy код в POM с помощью GMaven plugin: А выход

<plugin> 
    <groupId>org.codehaus.gmaven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
    <execution> 
     <id>set-custom-property</id> 
     <phase>initialize</phase> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <configuration> 
     <source> 
      def timestamp = new Date().format('MM_dd_yy') 
      project.properties.setProperty('timestamp', timestamp) 
     </source> 
     </configuration> 
    </execution> 
    <execution><!-- for demonstration purpose --> 
     <id>show-custom-property</id> 
     <phase>generate-resources</phase> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <configuration> 
     <source> 
      println project.properties['timestamp'] 
     </source> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

пример, показывающий свойство:

 
$ mvn generate-resources 
[INFO] Scanning for projects... 
[INFO]                   
... 
[INFO] --- gmaven-plugin:1.3:execute (set-custom-property) @ Q4081274 --- 
[INFO] 
[INFO] --- gmaven-plugin:1.3:execute (show-custom-property) @ Q4081274 --- 
11_02_10 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
... 

И снова, используйте этот свойство позже в имени сборки вашей сборки.

+0

Это здорово. Еще раз спасибо за ваш ответ и время Паскаля. – John

+1

Тогда примите это мой друг: D –

0

Если вы используете Hudson/Jenkins, вы можете просто использовать переменную $ {BUILD_ID} для получения типа метки времени в любом файле свойств, который хотите изменить.

информация для других переменных окружения Hudson/Jenkins поддерживает, посмотрите здесь: http://wiki.hudson-ci.org/display/HUDSON/Building+a+software+project

16

Вам не нужно Maven-метках плагин с более новыми версиями мавена. Начиная с 2.1'ish, Maven предоставляет специальное свойство maven.build.timestamp.

Вы можете установить формат в свойствах пом с чем-то вроде этого:

<maven.build.timestamp.format>yyyy-MM-dd'T'HH.mm.ss</maven.build.timestamp.format> 

И затем использовать $ {maven.build.timestamp} везде, где требуется свойство метки времени. См. http://maven.apache.org/guides/introduction/introduction-to-the-pom.html.

4

Как ${maven.build.timestamp} кажется багги в мавена, обходной путь выглядит следующим образом:

Создать новую переменную (я выбрал "build.timestamp", здесь) - и, при необходимости, указать формат:

pom.xml

<project> 
    ... 
    <properties> 
     ... 
     <build.timestamp>${maven.build.timestamp}</build.timestamp> 
     <maven.build.timestamp.format>yyyyMMdd</maven.build.timestamp.format> 
        <!-- default is: yyyyMMdd-HHmm --> 
    </properties> 
    <build> 
    ... 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <descriptors> 
        <descriptor>some-assembly.xml</descriptor> 
       </descriptors> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make</id> 
        <phase>package</phase> 
        <goals> 
         <goal>assembly</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

... 

Используйте пользовательскую переменную из любого места:

некоторые-assembly.xml

<?xml version="1.0"?> 
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
    <id>release-${build.timestamp}</id> 
    <baseDirectory>/</baseDirectory> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <formats> 
     <format>zip</format> 
    </formats> 
    <fileSets> 
     <fileSet> 
     <directory>${project.build.directory}/${project.artifactId}-${project.version}</directory> 
     </fileSet> 
    </fileSets> 
</assembly>