Я хочу создать zip-файл, который обновит приложение с помощью maven. Zip будет размещен на сервере, и я использую плагин сборки для создания Zip. Однако я бы хотел, чтобы maven автоматически генерировал текстовый файл, в котором хранится текущий номер версии за пределами zip. Как это возможно?
РЕДАКТИРОВАТЬ: Я успешно сделал это, используя плагин maven Assembly и два дескриптора для создания двух пользовательских сборок. У каждого есть одна цель каталога, и он просто создает папку с обновленным version.txt на основе фильтрации. Тогда другой с единственной целью фактически упаковывает файл почтового индекса. Это кажется очень не элегантным, и я думаю, что он не будет корректно обновлять репозиторий Maven со всей обновленной папкой. Если есть лучший способ сделать это, пожалуйста, дайте мне знать.
Конечно. Создайте текстовый файл где-нибудь в 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>
То, что вы имеете в виду, называется фильтрацией
Вам необходимо включить фильтрацию для определенного ресурса, а затем использовать $ {project.version}
, который будет заменен как часть вашей сборки