1

我在 Eclipse Indigo 上开发并测试了我的程序。运行时找到属性文件没有问题。我使用 Eclipse 导出创建了一个可运行的 jar。从 jar 运行程序时,程序找不到属性文件。属性文件不在 jar 中,它位于部署 jar 的目录的子目录中。如上所述,该目录位于 Eclipse 运行配置中的类路径中。

C:/myApp/myApp.jar C:/myApp/properties/myApp.properties

props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("myApp.properties"));

我只需要编辑 Jar 清单以将配置目录放在类路径上吗?

4

2 回答 2

0
properties.load(this.getClass().getResourceAsStream(configFileSrc));

这应该有效。

就我而言, configFileSrc = "/apiconfig/appconfig.properties"

在此处输入图像描述

我必须在构建路径中添加staticresources目录。

谢谢

于 2013-09-17T20:57:46.433 回答
0

是的。确保您指定 config 目录相对于 jar 所在目录的路径。既然你在上面说 config 目录是 jar 位置的子目录,这可能只是

<configDir>

<configDir>您的配置目录名称在哪里。

您还需要使用绝对资源名称进行查找,方法是在属性文件名中添加斜杠:

props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("/myApp.properties"));

这是因为您指定的相对名称将附加类的包路径,这是您不想要的。

您需要使用 contextClassLoader 是否有任何特定原因?更简单的调用是使用包含查找的类的类加载器。而且,由于该类可以委托给它的类加载器,您可以简单地说:

props.load(getClass().getResourceAsStream("/myApp.properties"));

最后 - 您是否考虑过将属性文件放入 jar 本身?如果它根本不会改变,这将是一个更好的选择。在这种情况下,您不需要指定 classPath。请注意,如果需要,您可以将其放在jar的子目录中,但您必须更改您查找的资源路径,并再次使用绝对资源名称

以下是有关绝对和相对资源名称的一些信息:

http://docs.oracle.com/javase/1.5.0/docs/guide/lang/resources.html

希望这可以帮助!

于 2013-09-17T21:26:42.813 回答