2016-07-06 147 views
0

我最近將我的javafx移植到了maven。它啓動並正常工作,但我無法弄清楚在哪裏放置配置文件夾,以及如何說它的外殼包含它的maven。將項目移植到Maven,在哪裏放置config文件夾

之前,我轉換的項目到Maven,該結構是這樣的:

| -src
| -lib
| -config

現在sructure看起來是這樣的:

| -src/main/java/my.super.program
| -src /主/資源/ my.super.program
| -lib
| -config

<resource>   
    <directory>config</directory> 
    <includes> 
     <include>*.xml</include> 
    </includes> 
    </resource> 

嘗試過,但還沒有工作。

在main.java中,我聲明瞭所需的配置文件。例如:

private final String configPath ='config/config.xml'; private final String accountPath ='config/account.xml';

如何包含config文件夾並告訴maven使用它?

+0

之後你如何使用'configPath'? – Tunaki

+0

您是否考慮過src \ main \ resources \ config? – vikingsteve

+0

Tunaki:我使用configPath加載(並保存)具有屬性的配置。 vikingsteve:請參閱下面的註釋。 – Ronon

回答

2

默認情況下,放置在src/main/resources中的所有內容都會添加到構建的jar文件中。或者,您可以創建自己的Maven模塊來保存配置。再次,你將不得不把它放在src/main/resources中

如果你決定創建一個保存配置的專用模塊,你將不得不將它添加到前一個模塊的依賴關係中。最好是編譯時依賴(這是範圍)。

+0

我將文件夾複製到src/main/resources。包含內容的文件夾現在在target/classes /下創建,幷包含config.xml。但是當我運行jfx時:運行什麼都不會被複制到target/jfx/app /。 – Ronon

+0

您需要構建jar。沒有什麼應該在目標/ jfx/app /下面它應該是你的jar文件中的頂層。然後你開始了罐子。 –

+0

他們是一種將config文件夾自動複製到target/jfx/app /的方式嗎?這將很好,因爲如果我運行jfx:native,config文件夾丟失,但是啓動時需要。 – Ronon

-2

我希望這個答案不會讓你困惑,如果是的話,可能只是尋求一個更簡單的解決方案。


罐子不是存儲可變配置的好地方。您只能將默認配置放入jar文件中。一個jar文件是不可寫的,所以如果它在jar中,你的程序不能覆蓋配置來更新它。

對於需要用戶特定配置的應用程序,我傾向於將配置存儲在$USER_HOME/.myapp目錄中。將文件系統用於配置而不是數據庫或Java首選項API的一個優點是可以使用標準文本編輯器輕鬆查看和編輯配置。

示例代碼,以確定一個主目錄應用程序的配置:

String configHome = System.getProperty("myapp.home", 
    System.getProperty("user.home") + "/.myapp" 
); 

你可以訪問的資源的默認配置出來的jar文件並將其複製到文件的文件系統上。然後用戶可以手動編輯文件系統上的文件來配置您的應用程序。或者,您可以提供您爲用戶創建的自定義UI,以修改文件中的信息。

這種方法的一個例子是在這個OsiamHome類中,這是我所見過的爲Java應用程序設置配置的最好方法之一(這是一個服務器應用程序,但一般原則可以用於客戶端應用程序) 。 osiam引用是一個Spring應用程序,因此它受益於Spring提供的一些配置支持,特別是PathMatchingResourcePatternResolver,它有助於遞歸搜索jar以查找應用程序的所有默認配置資源。

但是,您可能不需要基於Spring的方法提供的附加功能。相反,您可以僅使用默認配置中的所有文件的代碼列表,並將這些文件放在源樹中的/resources/config目錄中。構建過程會將默認配置複製到您的jar文件中進行部署。當應用程序運行時,如果文件系統上的config目錄不存在,應用程序可以從jar文件中讀取默認配置資源,並將配置資源複製到文件系統上的文件中。然後可以根據需要修改和更改配置文件。

你有一些其他的選擇來管理你的應用程序罐子外的配置是:

  1. 放置在一個數據庫中的配置信息或
  2. 使用Java preferences API
  3. 使用的包裝系統,例如rpm或(可能)javapackager工具或javafx maven plugin,它們將默認配置捆綁到本地部署包中。本機操作系統部署軟件可以提取配置並將其複製到您指定的位置。通常,此位置將是操作系統的標準配置位置,例如Linux系統配置中的/etc/myapp或用戶特定配置的$USER_HOME/.myapp
+0

我對你投票,因爲你沒有回答這個問題,而是把它變成另一個問題。他的問題是將配置放在maven項目中的位置,而不是「配置藍圖是什麼」。 –

+0

大概你是正確的,倒票是好的,這個問題讀我不同。 – jewelsea

相關問題