關於"user.dir"的認識


最近閱讀了一些tomcat源碼,看到tomcat在讀取jar包外配置文件,是將“user.dir”的路徑作為home path文件即

通過System.getProperty("user.dir")找到相關配置。然后自己做了一些嘗試,發現在eclipse執行的時候,

這個user.dir指向工程目錄下,貌似是想要的結果,但是繼續試驗發現,當用於一個windows services

來啟動這個jar包的時候,發現沒有按照預期的方式將日志寫在jar包同目錄下打印出來,

十分困惑,后來進一步查看tomcat相關源碼,注意到在commons-daemon(c++)源碼中,啟動jar包前,使用了SetCurrentDirectoryW(SO_STARTPATH)設定了當前exe所在的路徑為當前的工作目錄,這就是問題點,

設定以后jar包內獲取的"user.dir",就為當前的exe所在路徑(jar包和exe放在同一個路徑下)。

查閱了一些關於"user.dir"的資料,有如下等解釋:
1. "user.dir":User's current working directory  (官方) 其實不太好理解

2. 就是運行dos命令的那個目錄:
例如:
C:\Documents and Settings\user>java xxx

就是指的C:\Documents and Settings\user這個目錄
(在哪里java <yourClass> 哪里就是你的working directory.)

3. 用戶當前程序運行的路徑(用戶當前工作目錄)

這個有點豁然開朗的感覺,想想看,執行service的時候,其實已經有了當前的運行程序的路徑,而不是exe具體執行的路徑

進過測試打印是這個路徑:   C:\Windows

所以需要通過SetCurrentDirectory重新設定一下。

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM