可执行jar无法找到资源

时间:2013-04-03 15:16:53

标签: java maven

这是我的maven结构:

project
  ---src
    ----main
        ----java
            ----App.java
        ----resources
            ----config.properties

以下是读取config.properties的代码:

private static final URL propFile = ClassLoader.getSystemResource("config.properties");

public App() throws IOException {
    props.load(new FileInputStream(propFile.getFile()));
}

public static void main(String[] args) {
    try {
        App app = new App();
        //Something interesting happens here
    } catch (IOException e) {
        e.printStackTrace();
    }
}

当我运行java -jar MyApp-1.0.jar时,我会收到FileNotFoundException

  

java.io.FileNotFoundException:file:/home/dragon/JavaProjects/MyApp/target/MyApp-1.0.jar!/config.properties(没有这样的文件或目录)

它出了什么问题?

2 个答案:

答案 0 :(得分:1)

在java文件夹中,您应该放置App.java和资源目录。然后,您可以使用以下代码获取属性文件:

private static final URL propFile = getClass().getResourceAsStream("resources/config.properties");

public App() throws IOException {
    props.load(new FileInputStream(propFile.getFile()));
}

所以你的项目结构如下:

project
  ---src
    ----main
        ----java
            ----App.java
            ----resources
                ----config.properties

答案 1 :(得分:1)

其中任何一个都可以正常工作:

Properties props = new Properties();
props.load(Thread.currentThread().getContextClassLoader()
        .getResourceAsStream("config.properties"));
// OR
props.load(ClassLoader.getSystemResourceAsStream("config.properties");

在您的示例中,您尝试通过FileInputStream来访问嵌入在JAR存档中的文件,而这些文件是您无法直接执行的。