2009-08-12 155 views
1

我有一个Java应用程序“应用程序”,它具有“dep.jar”的依赖关系。 “dep.jar”有一个配置文件 - “conf.properties”,它被复制并打包到dep.jar中。问题是在运行“app”时,找不到“conf.properties”。Maven配置的依赖关系(jar)

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

Ronen。

更具体地说:我不需要该文件作为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

这取决于您如何尝试加载文件。如果使用Class.getResourceAsStream(),则路径相对于您调用getResourceAsStream()的类。要进入“根”,把一个"/"在文件名前面:

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

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

0

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

如果该项目是一个JAR项目(但没有声明的包装元素或<包装>罐子< /包装>)

如果conf.properties在以下的在src /主/资源文件夹定义“dep”项目,它会输出到最终的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 

如果你想从你会做亚伦的回答罐子的根访问资源流提示:

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

和资源将在

src/main/resources/conf.properties 
定义