Как добавить информацию о метке времени в артефакты Maven?

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

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

    project-1.0-SNAPSHOT.jar
    

    мы должно быть здание

    project-1.0-20090803125803.jar
    

    (где 20090803125803 - просто YYYYMMDDHHMMSS отметка времени когда опарник построенный.)

    единственное реальное требование что отметка времени будет частью имя файла сгенерированного файла.

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

эта информация включена в сгенерированном пом.свойства при запуске, например, mvn package но закомментирован:

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

любые идеи о том, с чего начать, были бы полезны! Спасибо!

6 ответов


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

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

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


для старых версий Maven посмотрите на maven-timestamp-плагин или buildnumber-maven-плагин.

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

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

и этого настройки buildnumber-maven-plugin должен создать свойство ${timestamp}, которое содержит значение метки времени. Кажется, нет способа создать версия.свойства файл непосредственно с этим плагином.

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

</configuration>

эти три сайты также стоит проверить.


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

подробнее: http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables


Если вам нужно время в часовом поясе, отличном от UTC (по умолчанию при использовании ${maven.build.timestamp}) можно использовать build-helper-maven-plugin. Более подробно см. краткие примеры использования целей плагина Build Helper Maven.

В любом случае, вот как я получил отметка времени в 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>

этот пост (особенно нижеприведенная часть) также очень полезен и практичен для этого вопроса.

штамповка номера версии и время сборки в файле свойств с 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


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


нам нужен более новый ответ :) Это построить сейчас: http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables

использовать ${maven.build.timestamp}