提问者:小点点

如何将配置文件捆绑在Java中的可执行jar文件中


我想在我的可执行jar文件中包含一些配置文件,但是在ecliplse中我似乎无法这样做。 没有在创建jar时添加本地文件的选项。 尝试这样做的目的是使默认配置文件在调用jar的任何地方都可用,而不是从其源位置可用。 例如,如果我使用相对路径从不同位置调用jar,即使配置本身就在jar位置中,也不会执行它。 所以每次我想要运行可执行文件时,我必须从它的源位置调用jar。 希望通过在jar本身中捆绑配置(在本例中是一个文本文件)来解决这个问题。 谁能帮帮我吗? 如果这不是直接可能的,在这种情况下有什么解决办法? 我肯定有软件使用默认配置捆绑在一起。 我是新的论坛,所以如果任何人想纠正任何文本的问题或更好的它,是欢迎的。


共1个答案

匿名用户

您可能希望将文本文件放在jar本身中。

假设您的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与main.class位于同一个“文件夹”中。 如果您想从jar的“根”开始,您可以这样做:.getResourceStream(“/com/arunavo/main/default-config.json”),这也可以。

通常,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/中的任何内容抛到javac中来“编译”,并通过复制来“编译”src/main/resources中的任何内容。 然后,您可以告诉IDE这是一个maven(或gradle)项目,IDE将从那里自动获取它。

您可以始终运行jar tvf yourjar.jar并检查配置文件是否在其中,并且位于正确的位置,以检查您的构建(无论是通过Eclipse的导出特性还是MVN/gradle)是否正确。

注意:如果您正确设置了eclipse,那么将配置文件放在普通eclipse项目的main.Java所在的位置,或者如果它是Maven-项目,则放在适当的src/main/resources/com/arunavo/main目录中,然后使用例如调试器从eclipse中运行应用程序,就可以很好地找到配置文件。