2012-01-10 75 views
0

我使用Eclipse和Maven m2e插件。我的項目使用位於config下的配置xml文件。 Maven項目佈局說你應該把這樣的東西放在srv/main/resources這裏,這裏的麻煩開始...管理不同的資源目錄

在應用程序中config目錄是硬連線相對於項目的根。我能以某種方式,甚至可能通過POM,欺騙Eclipse和Maven使軟件可以運行,即使這些文件在src/main/resources

編輯: Maven佈局表示只有src,target,pom.xml和一些txt文件在根目錄下。但是我部署的軟件需要根目錄下的配置。如果我的應用程序調用類似於新文件(「config/someXml.xml」)的情況,這並不完全合適。根據軟件是否部署或調試,我的軟件必須查看config/someXml.xml和src/main/resoruces/config/someXml.xml。

其他項目如何做到這一點?我不知何故必須更改我的代碼以提供目錄路徑?

+1

你寫過'srv/...' - 你的意思是'src/...',對嗎? – 2012-01-10 23:46:05

+0

謝謝,大概是今天第10次,我弄錯了:-) – 2012-01-10 23:49:39

+0

爲什麼這個標籤'nio'? – 2012-01-10 23:51:36

回答

1

從我自己的經驗,最常見,最有效的方式是讓你的應用程序解決從多個地方所需要的配置文件中預先定義的順序,僞代碼:

Properties config = null; 
// try load config file from pre-defined location, first attempt 
config = read("config/config.xml"); 
// if nothing is here, load config file from classpath, default. 
if (config == null) 
    config = read("src/main/resources/config.xml"); 

config.xml文件在src/main /資源總是與最終的可執行jar(在jar中)一起出現,如果config文件夾中沒有提供任何內容,請始終使用此默認值。因此,在開發過程中,應用程序可以使用src/main/resources/config.xml而不必關心config/config.xml的存在,當進行部署時,如果出現,它將開始使用config/config.xml。

+0

這是一個有趣但最強悍的方法:-)我想我將不得不刪除jar中的config.xml以阻止某些生產軟件訪問錯誤地測試區域而不是快速失敗。 – 2012-01-11 23:21:42

1

我不確定你想要做什麼,但是你可以在你的pom的build元素中指定額外的資源目錄。

<build> 
    <resources> 
    <resource> 
     <directory>config</directory> 
     <includes> 
     <include>**/*</include> 
     </includes> 
    </resource> 
    </resources> 
</build> 

要注意的是它所做的只是將所有文件從config目錄複製到你的輸出目錄(默認target\classes),因此從構建過程中查看它其實並不重要,不管是在configsrc/main/resources(只需在你的部分打字)。

+0

請參閱編輯我真正想做的事情:-) – 2012-01-10 23:50:18

1

更改應用程序。你的應用程序不應該知道項目根目錄是什麼。目前還不清楚,如果它是從你發佈的jar文件運行的話。

最常規的事情是將配置文件移動到src/main/resources或其他任何地方,然後將它們加載爲classpath resources

如果你不想這樣做,那麼使用java的-D參數爲應用程序提供一個config目錄路徑作爲系統屬性,然後查找相關的配置文件。在Eclipse中,您可以在啓動配置中進行設置。在命令行上,您可以將它設置在運行應用程序的包裝腳本中。或者,如果您使用的是應用服務器或其他容器,則使用特定的機制。

+0

應用程序運行在確保'config'目錄始終與jar相同的相對位置的框架中,但框架不關心Maven佈局。由於其他進程訪問這些文件,所以'config'文件夾必須通過'。/ config'文件系統相對於根來訪問。因此,沒有可能改變部署結構... – 2012-01-11 00:04:35

0

不知道這是否正是你試圖達到的目的,但你看看maven-resources-plugin,我想亞歷山大已經說過了嗎?

您可以定義和複製項目運行所需的額外資源, 我引用..[1]

可以使用魔力複製的資源來複制它是不是在默認的Maven佈局與否在構建/資源元素中聲明的資源並將其安裝到一個階段

[ 1] http://maven.apache.org/plugins/maven-resources-plugin/examples/copy-resources.html