Использование maven для вывода номера версии в текстовый файл

Я хочу создать zip-файл, который обновит приложение с помощью maven. Zip будет размещен на сервере, и я использую плагин сборки для создания Zip. Однако я бы хотел, чтобы maven автоматически генерировал текстовый файл, в котором хранится текущий номер версии за пределами zip. Как это возможно?

РЕДАКТИРОВАТЬ: Я успешно сделал это, используя плагин maven Assembly и два дескриптора для создания двух пользовательских сборок. У каждого есть одна цель каталога, и он просто создает папку с обновленным version.txt на основе фильтрации. Тогда другой с единственной целью фактически упаковывает файл почтового индекса. Это кажется очень не элегантным, и я думаю, что он не будет корректно обновлять репозиторий Maven со всей обновленной папкой. Если есть лучший способ сделать это, пожалуйста, дайте мне знать.

50
задан Bodo Thiesen 16 April 2019 в 16:42
поделиться

2 ответа

Конечно. Создайте текстовый файл где-нибудь в src / main / resources, назовите его version.txt (или как угодно)

Содержимое файла:

${project.version}

теперь в вашем pom.xml, внутри элемента сборки, поместите это block:

<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
      <includes>
        <include>**/version.txt</include>
      </includes>
    </resource>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>false</filtering>
      <excludes>
        <exclude>**/version.txt</exclude>
      </excludes>
    </resource>
    ...
  </resources>
</build>

после каждой сборки файл (который вы можете найти в target / classes) будет содержать текущую версию.

Теперь, если вы хотите автоматически переместить файл в другое место, вам, вероятно, потребуется выполнить задачу ant через maven-antrun-plugin .

Примерно так:

  <build>
    ...
    <plugins>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
         <version>1.4</version>
         <executions>
          <execution>
            <phase>process-resources</phase>
            <configuration>
               <tasks>
                 <copy file="${project.build.outputDirectory}/version.txt"
                   toFile="..." overwrite="true" />
              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
   </plugins>
 </build>
87
ответ дан 7 November 2019 в 10:37
поделиться

То, что вы имеете в виду, называется фильтрацией

Вам необходимо включить фильтрацию для определенного ресурса, а затем использовать $ {project.version} , который будет заменен как часть вашей сборки

13
ответ дан 7 November 2019 в 10:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: