依赖的Maven配置(jar)

时间:2009-08-12 14:41:57

标签: configuration maven-2 dependencies

我有一个java应用程序“app”,它依赖于“dep.jar”。 “dep.jar”有一个配置文件 - “conf.properties”,它被复制并打包到dep.jar中。问题是在“app”运行期间,找不到“conf.properties”。

我应该如何指定“conf.properties”的路径(在“dep.jar”的代码中),以便在运行时找到它?

罗南。

更具体一点:我不需要文件作为InputStream,但我需要文件的路径。特别是我需要它来配置JMX:

HashMap<String, Object> env = new HashMap<String, Object>();
...
env.put("jmx.remote.x.password.file", "password.properties");

“password.properties”是运行时所需的配置文件。此代码位于jar文件中,而不是应用程序中。我把它放在资源中后,“password.properties”位于jar文件中,但是如何在运行时访问它?

2 个答案:

答案 0 :(得分:2)

这取决于您尝试加载文件的方式。如果使用Class.getResourceAsStream(),则路径相对于您调用getResourceAsStream()的类。要访问“root”,请在文件名前添加"/"

InputStream in = Class.class.getResourceAsStream("/conf.properties");

[编辑]如果您需要文件的路径(即使它在JAR中),您可以使用返回URL的getResource()。使用new File(url.toURI())从网址获取路径。

答案 1 :(得分:0)

你在dep.jar中定义conf.properties在哪里?

如果项目是jar项目(没有声明的包装元素或&lt; packaging&gt; jar&lt; / packaging&gt;)

如果您的conf.properties在“dep”项目的src / main / resources文件夹中或下面定义,它将被输出到最终的jar。

例如,在

中定义的文件
src/main/resources/config/conf.properties

将打包在jar中

config/conf.properties

假设你有一个com.foo.Bar类,你想通过以下方式访问它的属性文件:

InputStream stream = Bar.getClass().getResourceAsStream("conf.properties");

然后文件conf.properties将在文件夹下定义:

src/main/resources/com/foo/conf.properties

如果您想从罐子的根目录访问资源流,您可以按照Aaron的回答建议:

InputStream stream = Bar.getClass().getResourceAsStream("/conf.properties");

,资源将在

中定义
src/main/resources/conf.properties