maven - 使用 maven,如何以特定格式将战争的最终名称与项目版本连接起来?
问题描述
Tomcat 的并行部署功能要求 .war 文件名采用特定格式。
例如:如果我们正在运行版本 1 的项目,并且我们需要热部署版本 2,则需要 .war 名称为“project-name##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)的每个“部分”连接的 war 文件?
- 使用本地配置文件:project-name-local##053106.war
- 使用配置文件产品:项目名称##053106.war
解决方案
您可以使用 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>
推荐阅读
- rust - 如何使用对 FnOnce 闭包的引用?
- mysql - CRUD notes - 为笔记离线创建 ID
- java - 如何让 Discord Bot 等待特定用户使用 JDA 发送消息?
- java - 从另一个类访问正在运行的应用程序类
- c# - 正则表达式匹配基本路径
- mysql - MySQL - 用第 2 行的第 2 列减去第 1 行的第 1 列
- excel - 无法将剪贴板中的数据范围粘贴到其他工作簿的选定单元格
- jupyter-notebook - 在 Daru 中,如何在单个 Cell 中显示多个 DataFrame?
- google-dl-platform - 可以启动在不同实例类型上创建的磁盘映像吗?
- django - 在小部件级别检查错误和其他值 - 可能使用自定义表单字段