运行时如何识别jar版本

时间:2019-02-27 07:40:32

标签: java jar versioning

有什么办法可以在编译过程中向jar添加一些信息。然后在执行过程中查看该信息,以了解正在执行哪个jar。

我的情况是,我用固定的jar名称构建一个jar,并将其发送到另一台机器上运行。但是有时似乎会运行旧版本的jar。有什么方法可以识别它,而无需在编译过程中更改jar文件名和提供信息。我不能每次都更改Java代码,但可以根据需要进行一次更改。

1 个答案:

答案 0 :(得分: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