Подтвердить что ты не робот

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

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

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

    project-1.0-SNAPSHOT.jar
    

    мы следует строить

    project-1.0-20090803125803.jar
    

    (где 20090803125803 - это только a YYYYMMDDHHMMSS метка времени, когда банка встроенный).

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

  • Тот же штамп времени должен быть включен в файл version.properties внутри сгенерированной банки.

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

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

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

4b9b3361

Ответ 1

Варианты 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>

Эти три сайты также заслуживают проверки.

Ответ 3

Если вам нужно время в часовом поясе, отличном от UTC (по умолчанию, когда вы используете ${maven.build.timestamp}), вы можете использовать build-helper-maven-plugin. Подробнее в Краткие примеры того, как использовать плагины сборки сборки 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>

Ответ 4

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

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

Ответ 5

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