2009-08-03 2 views
29

Я обновление большого скопления системы использовать Maven2 вместо Ant, и у нас есть два взаимосвязанных требования, которые я застрял на:Как добавить информацию о временном штампе в артефакты Maven?

  1. Нам нужно создать временные отметки артефакта, поэтому часть из пакета фазы (или где), вместо строительства

    project-1.0-SNAPSHOT.jar 
    

    мы должны строить

    project-1.0-20090803125803.jar 
    

    (где 20090803125803 - всего лишь YYYYMMDDHHMMSS отметка времени, когда баночка составляет ).

    Единственным реальным требованием является то, что штамп времени является частью файла сгенерированного файла .

  2. В том же время-штамп должен быть включен в течение version.properties файла внутри генерируемой банки.

Эта информация включена в сгенерированных pom.properties при запуске, например, mvn package но закомментирована:

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

Любые идеи о том, где начинать было бы полезно! Благодаря!

ответ

34

Варианты Maven 2.1.0-M1 или новее имеют специальную переменную maven.build.timestamp.

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

См. Maven documentation для получения более подробной информации.


Для более старых версий Maven взгляд на maven-timestamp-plugin или buildnumber-maven-plugin.

Если вы используете maven-timestamp-plugin, вы можете использовать что-то вроде этого, чтобы манипулировать полученным именем артефакта.

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

И эта конфигурация для BuildNumber-Maven-плагин должен создать свойство $ {} временная метка, которая содержит значение временной метки. Кажется, что нет способа создать файл version.properties напрямую с этим плагином.

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

</configuration> 

These threesites также стоит проверить.

+1

Возможно, вы сможете создать файл version.properties, заполнив его/src/main/resources и используя фильтрацию. Затем используйте свойство $ {timestamp} в фильтре. Трюк будет получать свойство $ {timestamp}, созданное до применения фильтров. –

+3

На всякий случай некоторые спотыкаются над этим старым ответом вроде меня: теперь он встроен: http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables – Jan

+1

@Jan Я обновил ответ. –

2

Когда развертывается проект SNAPSHOT, по умолчанию используется метка времени, если вы не переопределите ее в deploy plugin. Если вы не получаете уникальные временные метки, возможно, это зависит от конфигурации вашего репозитория Maven. Как говорит другой ответ, используйте плагин timestamp или buildnumber для релизов.

38

Если вы используете версию Maven> = 2.1.0-M1, вы можете использовать свойство $ {maven.build.timestamp}.

Для получения дополнительной информации см: http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables

+2

Я предпочитаю это, так как плагин не нужен. – Xorty

+0

Если вы используете maven-war-plugin, просто добавьте это в конфигурацию: ' ... $ {project.name} - $ {project.version} _ $ {maven.build.timestamp} ' – fl4l

+3

Это всегда приведет к времени в формате UTC, если вы хотите, чтобы время в другом часовом поясе использовало плагин' build-helper-maven-plugin': Поиск * часовой пояс * в [http://mojo.codehaus.org/ встроенный помощник-Maven-плагин/usage.html] (http://mojo.codehaus.org/build-helper-maven-plugin/usage.html). – lmiguelmh

13

Если вам нужно время в часовом поясе, кроме UTC (по умолчанию при использовании ${maven.build.timestamp}), вы можете использовать build-helper-maven-plugin. См. Больше в Brief examples on how to use the Build Helper Maven Plugin's goals.

Во всяком случае, это, как я получил метку времени в GMT-5 и поместить его в окончательном названии моего артефакта:

<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

Это сообщение (особенно ниже часть) также очень полезны и практичны в этом вопросе.

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

ПОМ будет выглядеть следующим образом

... 
<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> 
.... 

и имя пакета MyProject_1.0_2015_03_02_13_46.war

Смежные вопросы