1

我有一個小應用程序,我測試並打包到jar,並試圖運行它,但我有錯誤。無法從jar加載屬性

這裏是我的項目結構:

src 
    -kie.template 
    ----- ServerMain.java ==> Class with main 
    -kie.template.util 
    ---- PropUtils.java 
    ---- server.properties 
target 
    -kietemplate.jar 
    ---- lib 

在main方法,PropUtils類讀取性能。

public class PropUtils { 

    private static final String PROPERTIES = "server.properties"; 

    public static Properties load() { 
    Properties properties = new Properties(); 
      InputStream is = null; 
      try { 
       properties.load(PropUtils.class.getResourceAsStream(PROPERTIES)); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       if (is!=null) try{is.close();}catch(IOException e){} 
      } 

      return properties; 
     } 
    } 
} 

當我直接運行ServerMain類時,它工作正常。但經過我收拾它JAR和運行,它顯示錯誤:

java -cp lib -jar kietemplate.jar 

Caused by: java.lang.NullPointerException 
    at java.util.Properties$LineReader.readLine(Properties.java:418) 
    at java.util.Properties.load0(Properties.java:337) 
    at java.util.Properties.load(Properties.java:325) 
    at au.org.jeenee.kie.template.util.PropUtils.load(PropUtils.java:26) 

屬性文件所在的目錄,當我看着jar文件。 jar tf kietemplate.jar

任何幫助,將不勝感激。

編輯: 我改變了邏輯讀取性能:

Properties properties = new Properties(); 
InputStream is = null; 
try { 
    File file = new File("server.properties"); 
    is = new FileInputStream(file); 
    properties.load(new InputStreamReader(is)); 
} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    if (is!=null) try{is.close();}catch(IOException e){} 
} 

它需要的屬性在JAR文件的父目錄中的文件。

+0

Jar中的server.properties是什麼路徑?做一個'jar -tvf kietemplate.jar'並添加輸出作爲編輯。 –

+0

文件中的一些類名稱。 channel.s911 = mypackge.server.ClientInitializer – sunghun

回答

0

你的代碼在我的電腦上工作正常,無論是從JAR還是文件系統。

該行爲的一個可能原因是文件系統不區分大小寫,但jar文件區分大小寫。但是我們無法單獨從源代碼中看出來。

+0

非常感謝。我正在測試MacOSX,我會更多地進行調查。 – sunghun

+0

我改變了使用File類讀取屬性的邏輯。無論如何,現在它的工作。 – sunghun