Java 如何引用可执行jar和Eclipse中的属性文件?

Java 如何引用可执行jar和Eclipse中的属性文件?,java,executable-jar,Java,Executable Jar,我使用两个属性文件:log4j.properties和myapp.properties。我希望在Eclipse和可执行jar中执行应用程序时正确加载它们 ATM文件存储在这里:/src/configs/*.properties。我在代码中使用以下行引用它们: config = new PropertiesConfiguration(getClass().getResource("/configs/myapp.properties")); 如果我在Eclipse中执行我的应用程序,这非常有效,但

我使用两个属性文件:
log4j.properties
myapp.properties
。我希望在Eclipse和可执行jar中执行应用程序时正确加载它们

ATM文件存储在这里:
/src/configs/*.properties
。我在代码中使用以下行引用它们:

config = new PropertiesConfiguration(getClass().getResource("/configs/myapp.properties"));
如果我在Eclipse中执行我的应用程序,这非常有效,但是如果我执行(由Eclipse生成的)可执行jar,则会失败。我在
/META-INF/
中创建了一个清单文件,并将这一行写入其中:

Class-Path: .
实际上,执行jar仍然失败:-(我必须将属性文件放在哪里,如何引用它们

如果我执行jar,是否也可以在jar外部引用它们;如果我在Eclipse中,是否也可以在项目内部引用它们?
谢谢!

我觉得您尝试加载属性文件的方式很好。您检查过属性文件是否确实是生成的jar文件的一部分吗?

通常属性文件是指在不重建jar的情况下部署/修改的,例如环境/外部资源特定的内容,因此它们是单独存储的

但是,如果您需要将它们放在内部,请确保(在您的情况下)“configs/myapp.properties”实际上位于JAR的根级别。只需取消对您创建的JAR的限制即可查看其中的内容。或者您可以运行:

jar -tvf your.jar | grep myapp.properties
查看JAR中的实际路径而不取消其共享

如果有,您可以通过
classloader
加载它们,如下所示:

ClassLoader cl = YourClass.class.getClassLoader()

config = new PropertiesConfiguration( cl.getResourceAsStream( "configs/myapp.properties" ) ) );

我打开了jar文件,它看起来有点连线:-)第一件事是我不能用普通的解压程序打开它(不允许)。也许问题在于Eclipse的创建?!因此,您可以执行jar(直到应用程序无法加载属性文件为止),但不能在zip工具(如7-zip)中打开其内容?如果你能运行它,你应该能够解压它。除非jar文件仍然被锁定。你的应用程序还在运行吗?当应用程序无法加载属性文件时,会出现什么异常?现在我用jar-tvf进行了研究。。。最好的办法是将属性文件存储在jar之外,我想谢谢你的提示!正如您所说,应该在不重建jar的情况下部署属性文件(我已经更新了答案)。我该怎么做呢?当然,只需将它们作为类路径资源添加到classpath=>中即可。通常,您的类路径中会有“src/main/java”和“src/main/resources”(如果它是一个经典的maven结构),因此您可以只复制“src/main/resources”下的
configs
目录。或者只需将where
configs
live的根添加到Eclipse类路径:右键单击项目,选择“构建路径”=>“配置构建路径”,选择“源”。把它加在那里。