Как добавить информацию о метках времени в артефакты Maven? - PullRequest
37 голосов
/ 04 августа 2009

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

  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

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

Ответы [ 6 ]

46 голосов
/ 04 августа 2009

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

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

Подробнее см. Документацию Maven .


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

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

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

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

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

</configuration>

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

38 голосов
/ 17 августа 2009

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

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

16 голосов
/ 06 ноября 2014

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

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

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

Печать номера версии и времени сборки в файле свойств с 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

2 голосов
/ 04 августа 2009

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

1 голос
/ 01 июля 2016

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...