我希望添加一个产品版本号以显示在我的 .jar 文件信息中。目前我在我的 Spring boot 项目中使用 Maven 进行 API Rest。
我已经阅读了很多关于清单版本控制的解决方案。您必须在那里解压缩并访问 META-INF/MANIFEST.MF 以检查实现版本。这对我要找的东西来说太乏味了。
就像一个.exe。您可以在鼠标右键单击 -> 详细信息 -> “产品版本”下找到它,或者只需检查文件版本列,如图所示。 .
我还读到 JAR 文件是一种基于流行的 ZIP 文件格式的文件格式,用于将许多文件聚合成一个文件。我有点想将文件版本添加到 .zip,但我还是想问问这是否可能。
问候,加斯帕。
JAR 文件本身不能有版本。但是你正在使用 Maven,这意味着你已经可以访问 Maven 版本:
try (InputStream inputStream = getClass().getResourceAsStream("/META-INF/maven/<groupId>/<artifactId>/pom.properties")) {
Properties properties = new Properties();
properties.load(inputStream);
// available properties:
// - artifactId=xxx
// - groupId=xxx
// - version=xxx
}
请注意,这在单元测试中通常不起作用(尤其是从 IDE 运行时),因为文件仅添加到 JAR 文件中。
只需在 jar 中的任何位置包含一个文本文件。构建各种类型的系统使这变得微不足道。然后在你的代码中写下你用版本读出这个文本文件,并在屏幕上显示它。
在 maven、gradle 等中,要在 jar 中包含纯文本文件,只需将其放入
src/main/resources/version.txt
即可自动包含。
要用 java 阅读它:
public class Main {
public static String getVersion() {
try (var in = Main.class.getResourceAsStream("/version.txt")) {
return new String(in.readAllBytes(), StandardCharsets.UTF_8);
}
}
}
这个:
.class
文件的相同系统加载 version.txt。如果您不一定需要确切的版本,我见过的一种助记策略是触摸文件时间戳。它可能不合适和/或您必须确定如何处理超出时间戳范围的数字。
eg 使用 Powershell 设置 LastWriteTime(或 CreationTime)以匹配 v2.3.4 -> 02:03:04
$ff = Get-Item my.jar
$ff.LastWriteTime # Monday, 24 April 2023 16:25:56
$ff.LastWriteTime = $(Get-Date "24-apr-2023 02:03:04")
$ff.LastWriteTime # Monday, 24 April 2023 02:03:04
LastWriteTime 将显示在 Windows 资源管理器的“修改日期”列中。