如何在运行时识别jar版本

问题描述 投票:0回答:1

有没有办法在编译期间向jar添加一些信息。并在执行期间查看该信息以了解正在执行哪个jar。

我的情况是我正在构建一个具有固定jar名称的jar并将其发送到另一台机器上运行。然而,它有时会发生它似乎运行旧版本的jar。有没有办法识别它而无需更改jar文件名并在编译期间提供信息。我不能每次都更改java代码,但如果需要可以进行一次更改。

java jar versioning
1个回答
2
投票

要从jar获取版本,请使用:

OneOfYourClasses.class.getPackage().getImplementationVersion();

这假设您已在MANIFEST.MF中设置了实现版本,您可以在构建时执行此操作。它可能包括一个日期。

使用Maven,maven-shade-plugin可以使用ManifestResourceTransformer变换器为您完成此操作(我只是在这里使用pom中的版本):

<manifestEntries>
      <Implementation-Title>${project.artifactId}</Implementation-Title>
      <Implementation-Version>${project.version}</Implementation-Version>
</manifestEntries>

gradle应该有一个类似的插件。

编辑:Gradle更容易(来自https://docs.gradle.org/current/userguide/java_plugin.html):

jar {
    manifest {
        attributes("Implementation-Title": "YourJarName",
                   "Implementation-Version": version)
    }
}

编辑:如果你在Linux上,你可以从命令行看到版本:

unzip -p yourfile.jar META-INF/MANIFEST.MF | grep Implementation-Version
© www.soinside.com 2019 - 2024. All rights reserved.