2013-01-23 56 views
3

我正在嘗試創建jar,在那裏我可以讀取jar文件以外的配置文件。最好從jar文件所在的目錄。我的目錄結構如下:在jar外部讀取配置文件

/src/main/resources/config 

我有我運行mvn安裝上創建一個jar文件Maven項目。

<plugin> 
      <!-- Build an executable JAR --> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <classpathPrefix>lib/</classpathPrefix> 
         <mainClass>com.expedia.e3.qm.perforce.audit.Main</mainClass> 
        </manifest> 
        <manifestEntries> 
         <Class-Path>config/config.xml</Class-Path> 
        </manifestEntries> 
       </archive> 
       <excludes> 
        <exclude>**/config/</exclude> 
       </excludes> 
      </configuration> 
     </plugin> 

現在我手動從/目標移動我的config文件夾/班/ config來/目標/ config中我已經研究了Maven的組裝插件,但是我已經試過這一切的不同的配置和我無法得到它只輸出到/目標/配置它總是會輸出/target/audit-1.0/config其中audit-1.0是我的maven項目名稱。

我使用Intellij IDEA來調試我的程序並構建/安裝maven項目。

在代碼中我試圖通過

InputStream stream = Class.class.getResourceAsStream("/config/config.xml"); 

,當我在IDE中運行它其工作是訪問該文件但是當我在命令行中運行:

java -jar ./audit-1.0.jar 

,則拋出嘗試訪問「inputStream」後出現錯誤:

Exception in thread "main" java.lang.NullPointerException 

我知道「/config/config.xml」應該是po int到「/target/audit-1.0.jar!/config/config.xml」。不過,我希望它指向「/target/config/config.xml」

任何想法?這甚至有可能嗎?

+0

*「我正在嘗試創建jar文件,我可以讀取jar文件以外的配置文件。」*爲什麼不將它包含在Jar中? –

+0

我希望能夠在釋放jar而不必重新編譯它之後編輯程序的配置。 –

+0

*「無需重新編譯它。」*請注意,創建新的jar與重新編譯那裏的代碼不同。 OTOH我通常會把配置等資源。在一個單獨的Jar中,[Java Web Start](http://stackoverflow.com/tags/java-web-start/info)可以更新該部分。 –

回答

3
File base = new File(<Current class name here>.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParentFile(); 
File configFile= new File(base,"config.xml");