有没有办法在编译期间向jar添加一些信息。并在执行期间查看该信息以了解正在执行哪个jar。
我的情况是我正在构建一个具有固定jar名称的jar并将其发送到另一台机器上运行。然而,它有时会发生它似乎运行旧版本的jar。有没有办法识别它而无需更改jar文件名并在编译期间提供信息。我不能每次都更改java代码,但如果需要可以进行一次更改。
要从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