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

Функциональность Parallel Deployment от Tomcat требует, чтобы имя файла .war было в определенном формате.

Например: если у нас запущена версия 1 проекта и нам нужно развернуть версию 2 в горячем режиме, необходимо, чтобы имя .war было «имя-проекта##2.war».

Мы используем в нашем проекте семантическое управление версиями. Итак, наши версии, например, 5.31.6.

Когда мы развертываем новую версию через менеджер Tomcat, мы собираем проект с помощью maven, переименовываем имя файла в project-name##053106.war и загружаем его на сервер. Этот процесс является ручным и подвержен ошибкам.

Наша версия установлена ​​в pom.xml следующим образом:

<project xmlns = "http://maven.apache.org/POM/4.0.0"
  xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>br.com.group</groupId>
    <artifactId>project-name</artifactId>
    <version>5.31.6</version>
    <packaging>war</packaging>
    <name>Project Name</name>
    <description>Project Description</description>
    ...
</project>

Задаем конечное имя в профилях, например:

<profiles>
    <profile>
        <id>local</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <profilelabel>LOCAL</profilelabel>
        </properties>
        <build>
            <finalName>project-name-local</finalName>
        </build>
    </profile>
    <profile>
        <id>production</id>
        <properties>
            <profilelabel>PRODUCTION</profilelabel>
        </properties>
        <build>
            <finalName>project-name</finalName>
        </build>
    </profile>
</profiles>

Мой вопрос: с приведенными выше примерами, как я могу создать военный файл с окончательным именем, объединенным с номером версии без точек и, если возможно, с каждой «частью» версии «str_pad»ed (5.31.6 становится 053106)?

  • Использование локального профиля: имя-проекта-local##053106.war
  • Использование профиля prod: имя_проекта##053106.war

Что вы на самом деле пытаетесь сделать, кроме того, что у вас разные имена? Как правило, лучше иметь один артефакт, который работает везде, а все остальное (например, конфигурацию) использовать вовне.

Steve C 28.05.2019 16:45

Чтобы использовать функцию горячего развертывания от Tomcat, необходимо, чтобы номер версии добавлялся к имени файла, поэтому наилучшей версией будет та, которая получит новые сеансы. Я хочу, чтобы в процессе сборки можно было автоматически привязать номер версии к сгенерированному файлу WAR и просто загрузить его через менеджер.

Samuel Torga 28.05.2019 17:51

Я хотел бы увидеть некоторую документацию относительно «Функциональности горячего развертывания от Tomcat требует, чтобы имя файла .war было в определенном формате». Я никогда не слышал об этом раньше, поэтому довольно внимательно просмотрел документацию по развертыванию Apache Tomcat и ничего не нашел по этому поводу...

Steve C 29.05.2019 04:44

@SteveC после некоторых исследований я думаю, что неправильно использовал термин «горячее развертывание». Глядя на документы, правильным является «Параллельное развертывание», и вот ссылка на документы: tomcat.apache.org/tomcat-8.5-doc/config/… Я должен изменить ее в описании вопроса.

Samuel Torga 29.05.2019 15:40
Не удалось выполнить цель org.apache.maven.plugins
Не удалось выполнить цель org.apache.maven.plugins
Опишу, что когда я только начинал изучать Maven, у меня не получалось компилировать и упаковывать.
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
0
4
512
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать плагин gmaven, чтобы изменить project.version любым желаемым образом и назначить его свойству (все на этапе инициализации). Вот пример, он обрабатывает версии с частью -SUFFIX (на всякий случай он обрабатывает случай нескольких дефисов):

<build>
    <finalName>yourProjectName-${paddedVersion}</finalName>
    <plugins>
        <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>gmaven-plugin</artifactId>
            <version>1.4</version>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>execute</goal>
                    </goals>
                    <configuration>
                        <source>
                            println('Mangling project version: ' + project.version)
                            String[] versionParts = project.version.split("-")
                            paddedVersion = versionParts[0].split("\\.").collect { it.padLeft(2,"0") }.join()
                            if (versionParts.size() > 1) {
                                paddedVersion += "-" + versionParts[1..-1].join("-")
                            }
                            println('Padded version version: ' + paddedVersion)
                            project.properties["paddedVersion"] = paddedVersion
                        </source>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

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