我在Netbeans中有两个Maven项目,com.foo.bar和com.foo.baz。
com.foo.bar是com.foo.baz的依赖项。
bar
+-src
| +-main
| +-java
| | +-com
| | +-foo
| | +-bar
| | +-App.java
| +-resources
| +-com
| +-foo
| +-bar
| +-config.properties
+-target
| +-classes
| +-com
| +-foo
| +-bar
| +-App.class
| +-config.properties
+-pom.xml
在Netbeans中,我点击展开项目baz-> dependencies-> bar-> com.foo.bar,我看到与bar / target / classes / com / foo / bar相同的内容。一切都很好,我想。
com.foo.bar有行
// print current directory
System.out.println(new File(".").getAbsolutePath());
// load config files
Properties conf = new Properties();
conf.load(new FileInputStream(config.properties));
com.foo.baz类似,但在resources/
中没有任何内容。当我构建依赖项com.foo.bar和com.foo.baz然后运行com.foo.baz时,我得到了
/home/user/NetBeansProjects/baz/.
java.io.FileNotFoundException: config.properties (No such file or directory)
这是类路径的问题,还是什么? Maven不应该处理这个吗?
答案 0 :(得分:1)
如果您想从config.properties
课程加载App
,那么您可以这样做:
public class App {
public void someMethod() {
InputStream is = getClass().getResourceAsStream("config.properties");
Properties properties = new Properties();
try {
properties.load(is);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("foo = " + properties.getProperty("foo"));
}
public static void main(String[] args) {
App app = new App();
app.someMethod();
}
}
config.properties
与getResourceAsStream()
使用的类相关。
答案 1 :(得分:0)
您需要将整个路径添加到文件中,如此
conf.load(new FileInputStream("com/foo/bar/config.properties"));
如果您将文件放在资源中的根文件夹中,那么它将在没有路径的情况下工作。
bar
+-src
| +-main
| +-java
| | +-com
| | +-foo
| | +-bar
| | +-App.java
| +-resources
| +-config.properties
(...)