有什么办法可以在编译过程中向jar添加一些信息。然后在执行过程中查看该信息,以了解正在执行哪个jar。
我的情况是,我用固定的jar名称构建一个jar,并将其发送到另一台机器上运行。但是有时似乎会运行旧版本的jar。有什么方法可以识别它,而无需在编译过程中更改jar文件名和提供信息。我不能每次都更改Java代码,但可以根据需要进行一次更改。
答案 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