maven配置文件pom增加变量取版本号方式

maven配置⽂件pom增加变量取版本号⽅式
⽬录
maven配置⽂件pom增加变量取版本号
1.定义版本号
2.取版本号,⽅便以后架包版本升级
maven读取程序版本号的3种⽅法
⽅法1
⽅法2
⽅法3
maven配置⽂件pom增加变量取版本号
1.定义版本号
<properties>
<spring.version>3.2.2.RELEASE</spring.version>
</properties>
2.取版本号,⽅便以后架包版本升级
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
maven读取程序版本号的3种⽅法
⽅法1
在应⽤项⽬中,如果应⽤程序需要获取当前程序的版本号,可以读取”/META-
INF/maven/${groupId}/${artifactId}/pom.properties“,获取maven⽣成的版本信息。
当然前提⽤应⽤程序在运⾏时得知道⾃⼰的groupId和artifactId,否则⽆法定位路径。
pom.properties内容⽰例
#Created by Apache Maven .5.0
version=1.0.4-SNAPSHOT
groupId=com.gitee.l0km
artifactId=facelog-service
这种⽅法很简单,但也有缺点:
貌似这种⽅法只能获取maven默认定义${project.version},⽆法加⼊⾃定义的信息。
⽅法2
还有⼀个⽅案就是直接将版本信息写⼊MANIFEST.MF。通过java.util.jar.Manifest来读取解析MANIFEST.MF来获取版本号。如下增加buildnumber-maven-plugin插件,并给maven-jar-plugin插件指定写⼊MANIFEST.MF的参数。
<plugin>
<groupId&jo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifestEntries>
<!-- 项⽬版本号 -->
<Project-Version>${project.version}</Project-Version>
<!-- buildnumber插件提供的 SCM(git/svn等)版本号 -->
<Scm-Version>${buildNumber}</Scm-Version>
<!-- 时间戳 -->
<Timestamp>${maven.build.timestamp}</Timestamp>
</manifestEntries>
</archive>
</configuration>
</plugin>
⽅法3
前⾯两种⽅案,都需要将应⽤程序打成jar包才能读取版本信息。
scm文件
那么程序在开发调试的时候,并没有⽣成pom.properties,和MANIFEST.MF,也就⽆法读取版本信息了。
所以另⼀种思路就是⽤ template-maven-plugin插件让maven⾃动⽣成⼀个包含版本信息的代码如Version.java。这样任何时候,程序都能很⽅便的知道⾃⼰的版本号了。
模板
⾸先需要⼀个代码模板Version.java,⽰例如下:
package net.gdface.facelog.service;
public final class Version {
/** project version */
public static final String VERSION = "${project.version}";
/** SCM(git) revision */
public static final String SCM_REVISION= "${buildNumber}";
/** SCM branch */
public static final String SCM_BRANCH = "${scmBranch}";
/** build timestamp */
public static final String TIMESTAMP ="${buildtimestamp}";
}
模板放在/src/main/java/java-templates/${package_of_template}/下
原本在模板⽂件中⽤maven内置变量${maven.build.timestamp}做时间戳,实际运⾏并没有被正确替换,不知道原因。所以改为使⽤buildnumber-maven-plugin插件(goal create-timestamp)⽣成的时间戳${buildtimestamp}
插件
然后修改l增加 template-maven-plugin插件和buildnumber-maven-plugin插件
<plugin>
<groupId&jo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<id>bn1</id>
<goals>
<!-- 创建${buildNumber} -->
<goal>create</goal>
</goals>
</execution>
<execution>
<id>bn2</id>
<goals>
<!-- 创建时间戳${buildtimestamp} -->
<goal>create-timestamp</goal>
</goals>
<configuration>
<!-- 指定时间戳变量名 -->
<timestampPropertyName>buildtimestamp</timestampPropertyName>
<!-- 指定⽇期格式 -->
<timestampFormat>yyyy-MM-dd HH:mm:ss</timestampFormat>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId&jo</groupId>
<artifactId>templating-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<id>filter-src</id>
<goals>
<goal>filter-sources</goal>
</goals>
</execution>
</executions>
</plugin>
template-maven-plugin插件会将/src/main/java/java-templates/⽂件夹下的所有模板中的${xxx}占位符都⽤maven中同名的变量替换⼀遍,
⽣成的Version.java在${project.build.directory}/generated-sources/${package_of_template}下,并且该⽂件夹会⾃动成为源码⽂件夹加⼊编译过程。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

本文发布于:2024-09-22 21:20:56,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/381761.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:程序   版本号   增加   读取   件夹   指定   变量   获取
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议