Maven构建JAR运行时获取Implementation-Version返回null问题
解决JAR运行时无法获取版本信息返回null的问题
问题核心是Maven默认不会自动将项目版本写入Manifest的Implementation-Version字段,你需要显式配置maven-jar-plugin来生成包含版本信息的Manifest文件。
步骤1:修改pom.xml配置maven-jar-plugin
在你的maven-jar-plugin中添加归档配置,让Maven把项目版本写入Manifest:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <addDefaultImplementationEntries>true</addDefaultImplementationEntries> </manifest> <manifestEntries> <Implementation-Version>${project.version}</Implementation-Version> </manifestEntries> </archive> </configuration> </plugin>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>:自动添加默认的实现相关条目,配合手动指定版本更稳妥<Implementation-Version>${project.version}</Implementation-Version>:直接将pom中的版本号写入Manifest对应字段
步骤2:简化Java代码获取版本
原代码操作JarFile的逻辑复杂,还可能出现路径处理问题,推荐用更简洁可靠的方式:
String version = MyClass.class.getPackage().getImplementationVersion();
这段代码会直接从类的Package信息中读取Manifest里的Implementation-Version值,无需手动解析Jar包。
验证
执行mvn clean package重新打包后,打开JAR内的META-INF/MANIFEST.MF文件,确认存在Implementation-Version: 1.2.0条目,再运行JAR即可正确获取版本信息。
内容的提问来源于stack exchange,提问作者sander126
相关产品推荐
相关产品推荐

