2013-04-20 14 views
3

創建至少應在Windows,Linux,Mac OS和Android上部署的Java解決方案時,我們正在尋找一種方法來保持系統範圍的配置數據。何處放置以及如何獲得系統範圍配置數據的適當位置,例如system_home以獨立於平臺的方式用於Java?

in What is the proper way to store app's conf data in Java? 解決方案圍繞特定用戶的主目錄進行討論。 Oracle的文檔頁面之一:

http://docs.oracle.com/javase/7/docs/technotes/guides/deployment/deployment-guide/properties.html

一個類似的方法IST拍攝。

我們想走一條更系統化的路線。例如。在Linux系統上,/ etc或/ var/lib的子目錄可能是合適的位置。在Windows/$ WIN/System32可能是一個開始,在Mac OS/System/Library可能是位置。

JAVA_HOME - 可能是一種選擇,而是有它自己的問題: Windows ignores JAVA_HOME: how to set JDK as default?

的java.util.Preference類已經存在了一段時間,但ID不提供備份存儲位置的正確選擇 : http://www.allaboutbalance.com/articles/disableprefs/

這將是一個庫,允許

  • 找出正確的系統範圍的目錄
  • 添加專用的子文件夾
  • ,並且可以處理性能

問題的第一部分是在正確的位置(這可能是與常規的屬性文件或java.util.Preferences完成)獨立於平臺的方法。應該使用什麼目錄,例如在Android上?哪些後續問題需要處理(例如訪問權限)? 假設是,如果圖書館存在,問題的第一部分將通過圖書館處理這部分問題的方式來回答。所以如果你認爲沒有這樣的圖書館,你會被邀請回答這部分問題。

+1

沒有這樣的平臺獨立的概念。配置真的必須在系統範圍內嗎?讓我感到震驚的是,除非您關心多用戶系統,否則Java首選項將與您可以使用的平臺無關的庫相關。 – Perception 2013-04-20 13:35:32

+0

你有沒有考慮過'System.getProperty(「java.home」)'? – OldCurmudgeon 2013-04-20 14:50:23

回答

0

該方法在: http://www.java-tutorial.ch/core-java-tutorial/java-osname-system-property 是我能找到到目前爲止最接近:

String osName = System.getProperty("osName", null); 
OperatingSystem operatingSystem = OperatingSystem.resolve(osName); 
OperatingSystemFamily family = operatingSystem.getFamily(); 
switch (family) { 
    case UNIX: 
    setBinFolder(DEFAULT_UNIX_BIN); 
    setConfFolder(DEFAULT_UNIX_CONF); 
    setDataFolder(DEFAULT_UNIX_DATA); 
    break; 
    case WINDOWS: 
    setBinFolder(DEFAULT_WINDOWS_BIN); 
    setConfFolder(DEFAULT_WINDOWS_CONF); 
    setDataFolder(DEFAULT_WINDOWS_DATA); 
    break; 
    case MACOS: 
    setBinFolder(DEFAULT_MACOS_BIN); 
    setConfFolder(DEFAULT_MACOS_CONF); 
    setDataFolder(DEFAULT_MACOS_DATA); 
    break; 
    default: 
    setBinFolder(USER_HOME+"/bin"); 
    setConfFolder(USER_HOME+"/conf"); 
    setDataFolder(USER_HOME+"/data");     
    break; 
} 

但只解決了識別操作系統和相應的反應問題的一部分。 歡迎隨時在此基礎上回答問題。

相關問題