弹簧工具套件创建runnable jar错误查找配置文件

时间:2015-01-20 17:34:27

标签: java spring executable-jar

我试图在Spring工具套件中第一次创建一个可运行的jar。我使用导出功能并创建jar文件,但在运行时,我收到以下错误:

java.io.FileNotFoundException: config.properties (The system cannot find 
the file specified)

我在这里找到了一些建议的解决方案,引用将文件放在源文件夹中,即使我已经这样做了,它仍然看不到文件。我甚至把它放在多个地方,希望能有效。

enter image description here

我在这里调用类来读取文件:

public static void main(String[] args) {
    // TODO Auto-generated method stub
      System.out.println("GETTING CONFIG PROPERTIES FILE...");
      configuration.readConfig();

....
public static void readConfig() {

    Properties fileProp = new Properties();
    try {

        //OutputStream output = null;
        URL url1 = configuration.class.
                getClassLoader().getResource("config.properties");
        File f = new File(url1.getFile());
        FileReader rd = new FileReader(f.getPath());

        //InputStream infile = new FileInputStream("config.properties");
        fileProp.load(rd); 

编辑:

通过插入斜杠对文件名路径进行了更改,但似乎无法找到该文件:

LOADING CONFIG PROPERTIES FILE...
 Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.jdt.internal.jarinjarloader.
    JarRsrcLoader.main(JarRsrcLoader.java:58)
    Caused by: java.lang.NullPointerException
    at com.ccccc.hbasededuper.
    configuration.readConfig(configuration.java:48)
    at com.ccccc.hbasededuper.HBaseMain.main(HBaseMain.java:144)
    ... 5 more

这行代码碰巧是这样的:

       URL url1 = configuration.class.getClassLoader().
       getResource("/config.properties");

        System.out.println("LOADING CONFIG PROPERTIES FILE...");

        File f = new File(url1.getFile());
        FileReader rd = new FileReader(f.getPath());

错误发生在url1.getFile。

EDIT2:

想出来;问题是我在阅读属性文件的方式。

fileprop.load(ClassLoader.getSystemResourceAsStream("config.properties"))

2 个答案:

答案 0 :(得分:1)

我很确定你想要的是src / main / resources中的那个,可以通过

引用
configuration.class.getClassLoader().getResources("/config.properties")

注意'/'。

答案 1 :(得分:0)

以下是产生差异并保持配置文件的原因 的src /主/资源

  fileProp.load(configuration.class.
       getClassLoader().getResourceAsStream("config.properties"));