茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1674657 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
HoneyMoon_Day3_00114.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

爪哇咖啡屋 : [分享]如何在 Solaris 和 MS Windows 系統環境中設定永久的 classpath

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[分享]JRE class loader
JRE/lib/ext 的用途是讓你放 third-party 的 library,
JRE 啟動時會把自動載入裡頭的 jar(應該說 classloader 需要 resolve class 時會到這個目錄下來找)。

主要的問題是,
安裝 JDK 時一般人可能會裝兩個 JRE,
一在 JDK 安裝目錄下的 JRE 目錄,
一在(預設) Program files 目錄下的 Java 目錄。
javac.exe 使用的是 JDK 所附的 private JRE(JDK/JRE),
而執行 Java 程式則要看你的 path 定。

JDK\bin\java.exe, JDK\jre\bin\java.exe 使用的是 private JRE,
program files\java\jre1.x.x\bin\java.exe, WinNT(Windows)\system32\java.exe 使用的是 public JRE。javaw.exe 同上。

比較保險的做法是把 third-party library jar file 在 private JRE/public JRE 各放一份,
這樣可確保編譯時可以 resolve third-party classes,或是設定 path 使得優先使用 private JRE(或乾脆就移除掉 public JRE)。

Eclipse 比較特別,
你可以只把 third-party 放在 public JRE 就好,
不需要放在 private JRE 也可以在編譯時讓編譯器去參考到所需要的 class。

javax 是 java "extention", 個人認為比較不像 "application",
既然是 Java 的一部份, 建議直接放 jre/lib/ext 下也無可厚非,
但版本的問題可能會是 nightmare.
個人認為還是用 "application specific" classpath 好.

Application 把 jar 直接往 jre/lib/ext 放, 不是不可以, 而是『不應該』.
如果在 jre/lib/ext 下有一個 a.jar, 在classpath中有一個 a.jar,
在 WEB-INF/lib 下也有一個 a.jar,哪一個會先被用呢?
uninstall 亦是個問題.

對新手來說, 建議把所有的 jar 往 jre/lib/ext 放可能方便些,
but may not be a good practice.

這裡有兩郭可以參考的文件:
http://cvs.apache.org/viewcvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/
http://www.javaworld.com/javaworld/javatips/jw-javatip105.html

對於一般j2ee application or web application 來說,
j2ee application server or servlet container 都有提供標準的 java extention.
J2ee application server installation, normally, should not pollute your jre directory with extra extention jars.

但如果你的 applicaion/web-app 需要一些其他的 jar,
這些 jar file '最好' 放在 .war/.ear 中.
既便是你的兩個web-app擁有及使用不同版本的girl4j.jar,
container應該要很安全的把她們區隔開來
前一個主題 | 下一個主題 | | | |

討論串




Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|