簡體   English   中英

如何將屬性的文件版本詳細信息添加到 a.jar?

[英]How can I add file version detail on properties to a .jar?

我希望添加一個產品版本號以顯示在 my.jar 文件信息中。 目前我在我的 Spring 引導項目中使用 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。
  • 完全讀取該輸入流,並使用 UTF_8 編碼將其轉換為字符串。
  • 使用 try-with-resources 因為它是一種資源,如果你不想泄漏,你必須這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM