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

StackOverflow https://stackoverflow.com/questions/1224359

  •  11-07-2019
  •  | 
  •  

Вопрос

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

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

    project-1.0-SNAPSHOT.jar
    

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

    project-1.0-20090803125803.jar
    

    (где 20090803125803 это всего лишь YYYYMMDDHHMMSS отметка времени, когда jar будет создан ).

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

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

Эта информация включена в сгенерированный пом.свойства когда вы бежите, например, mvn package но закомментирован:

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

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

Это было полезно?

Решение

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

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

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


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

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

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

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

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

</configuration>

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top