2014-05-12 80 views
1

我使用Spring和Maven構建我的項目,並在src/main/resources路徑(application.properties,log4j.properties)中有兩個文件。如果我在IDE中打開了我的項目並運行它,則一切正常,可以更改application.properties文件中的值並再次使用更改後的值運行項目。但是當我運行一個命令mvn clean install所以是的,我得到.jar文件,但我不能用.properties文件配置這個.jar文件。這個.jar在構建之前使用屬性文件中的值。Spring + Maven + .properties文件

我不知道這是否重要,但這是我如何在Spring應用程序上下文中定義屬性文件的方式。

@PropertySource({"application.properties", "log4j.properties"}) 
public class AppConfig { 

我將這些插件放在pom.xml文件中。可以嗎?你能幫我嗎?它看起來像builded .jar項目不知道在同一目錄級別的.properties文件。

<plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.2</version> 
      <!-- nothing here --> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.2-beta-4</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <archive> 
        <manifest> 
         <mainClass>cz.cvut.fit.bouchja1.ensemble.main.EnsembleApp</mainClass> 
        </manifest> 
        <manifestEntries> 
         <Class-Path>.</Class-Path> <!-- HERE IS THE IMPORTANT BIT --> 
        </manifestEntries>       
       </archive> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin>      
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 

    </plugins>  
+0

當你離開Class-Path時會發生什麼? –

+0

你的意思是如果我刪除它?我會嘗試。 –

+0

您是否嘗試爲@PropertySource指定文件路徑?我認爲這將工作︰@PropertySource({「classpath:application.properties」,「classpath:log4j.properties」}) – gerardribas

回答

0

好了的,似乎解決方案是這樣的:

@PropertySource({"file:application.properties", "file:log4j.properties"}) 

運行MVN全新安裝和創建一個.jar文件後,我可以在.jar旁邊添加application.properties和log4j.properties文件,我可以使用屬性文件來配置項目。

但是:當我想從運行的NetBeans項目,有一個文件「不存在一個問題:......因爲它不是在類路徑中指定我認爲這可能是有益的。

@PropertySource({"classpath:log4j.properties", "classpath:application.properties", "file:application.properties", "file:log4j.properties"}) 

但沒有真正有一個例外是這樣嘗試後拋出:

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to load bean class: cz.cvut.fit.bouchja1.ensemble.spring.AppConfig; nested exception is java.io.FileNotFoundException: application.properties (Directory or file does not exist) 

編輯:這正是解決方案,我一直在尋找How to Exclude poperties file from jar file?

1

對於運行屬性利用Properties Api

+0

我已經定義這已經...我的程序知道屬性文件但問題是,在安裝Maven(並創建一個.jar文件)之後,我想有一個選項可以從外部更改屬性...所以在它旁邊會有.jar文件和.properties文件。 –

+0

You are .. 。但有沒有一些本地解決方案的Spring?我有所有項目和屬性加載在春季寫入。 –