自定义Jar,War中的MANIFEST.MF

分享一个小技巧,我们发布的时候需要确认发布的版本是不是最新打包的.可以利用自定义MANIFEST.MF来解决.总的思路就是在maven打包的时候自动加入版本信息打在MANIFEST.MF中,然后暴露Http接口来查看对应的版本号.

首先修改pom.xml,如果是war包就包插件换成maven-war-plugin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<index>true</index>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<version>${myversion}</version>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>

然后打包的时候加入myversion参数

1
mvn clean package -Dmyversion=20191111

这样在jar包中的META-INF/MANIFEST.MF中就有version字段了.读取的话可以使用jcabi-manifests,当然自己写也很简单

1
2
3
4
5
<dependency>
<groupId>com.jcabi</groupId>
<artifactId>jcabi-manifests</artifactId>
<version>0.7.5</version>
</dependency>

如果是war包的话,可以看看这篇文章

1
2
3
4
5
ServletContext application = getServletConfig().getServletContext();
InputStream inputStream = application.getResourceAsStream("/META-INF/MANIFEST.MF");
Manifest manifest = new Manifest(inputStream);
//get version
manifest.getMainAttributes().getValue("Version");

这样就能用来check发布到线上的版本是不是刚刚打出来的版本.毕竟发布系统有时候也会有bug的.^_^