簡體   English   中英

如何在 java 中的可執行 jar 文件中捆綁配置文件

[英]How to bundle configuration files in an executable jar file in java

我想在我的可執行 jar 文件中包含一些配置文件,但是從 ecliplse 我似乎無法這樣做。 在創建 jar 時沒有添加本地文件的選項。 嘗試這樣做的目的是使默認配置文件可從調用 jar 的任何位置獲得,而不是從其源位置獲得。 例如,如果我使用相對路徑從不同的位置調用 jar,即使配置位於 jar 位置本身,也不會執行配置。 因此,每次我想運行可執行文件時,我都必須從其源位置調用 jar。 想要通過在 jar 本身中捆綁配置(在本例中為文本文件)來解決此問題。 有人能幫幫我嗎? 如果這不是直接可能的,在這種情況下有什么解決方法? 我敢肯定,有些軟件會使用與自己捆綁的默認配置。 我是論壇的新手,所以如果有人想更正問題中的任何文本或更好,歡迎。

大概您想要 jar 本身內部的文本文件。

那么如何從我的 java 代碼中讀取該文本文件?

假設您的 jar 看起來像這樣(假設我們設法以某種方式獲取該文本文件):

jar tvf Arunavo.jar

439 Wed Sep 26 20:45:34 CEST 2019 com/arunavo/main/default-config.json
1439 Wed Sep 26 21:40:34 CEST 2019 com/arunavo/main/Main.class

然后,在你的Main.java文件中,你會寫:

try (InputStream in = Main.class.getResourceAsStream("default-config.json")) {
    String data = new String(in.readAllBytes(), StandardCharsets.UTF_8);
    // do something with your config here...
    System.out.println(data);
}

這是因為default-config.json在同一個“文件夾”中。 如果你想從 jar 的“根”開始 go,你可以這樣做: .getResourceAsStream("/com/arunavo/main/default-config.json")也可以。

那么如何在我的 jar 中獲取該文本文件?

通常,eclipse 會持續“編譯”項目配置中標記為“源文件夾”的任何文件夾中的任何文件。 它通過編譯 java 文件來編譯它們。 它通過復制任何其他文件(非類、非 java 文件)來“編譯”它。 所以..只是...將該配置文件放在您的 java 文件旁邊。

請注意,使用 IDE 作為構建系統不是我(或任何人,真的)推薦的東西:它們只是不是構建系統。 是的,eclipse 具有“導出到 jar”功能,但它的功能非常有限。 花一點時間了解如何使用 maven 或 gradle。 這兩者通常使用以下目錄結構:

src/main/java/com/arunavo/main/Main.java
src/main/resources/com/arunavo/main/default-config.json

maven(和 gradle,開箱即用),通過將src/main/java中的任何內容扔到javac中“編譯”它,並通過復制在src/main/resources中“編譯”任何內容。 然后,您可以告訴您的 IDE 這是一個 maven(或 gradle)項目,IDE 將從那里自動獲取它。

您始終可以運行jar tvf yourjar.jar並檢查配置文件是否在其中,並且在正確的位置,以檢查您的構建是否正確,無論是通過 eclipse 的導出功能還是 mvn/gradle。

NB: If you set eclipse up right, so put the config file in the same place as where Main.java lives for a plain eclipse project, or in the appropriate src/main/resources/com/arunavo/main directory if it's a maven -java 項目,然后從 eclipse 中運行您的應用程序,例如使用調試器會發現配置文件很好。

暫無
暫無

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

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