2011-10-31 39 views
1

關於this page的信息提供了一些很好的提示和一般信息,但沒有定論。javac如何定位Java API類?

我知道javac.exe基本上只是使用Java從'tools.jar'啓動'sun.tools.javac.Main'。我也知道Java API類存儲在JDK下的'jre/lib'的'rt.jar'中。這是'javac.exe'加載Java API類的地方嗎?

我想知道這個場景,特別是:假設我安裝了jdk1.6.0_17,後來我安裝了jdk1.6.0_25。如果我從jdk1.6.0_17運行'javac.exe',它是否會從1.6.0_17或1.6.0_25中的'rt.jar'加載Java API類?

我想知道這一切是我在我知道我編譯代碼將在Java的特定(不是最新的)版本上運行的情況,究其原因,我想編譯使用相同的確切版本的javac和Java API來確保兼容性。

+0

是不是有你的IDE可能配置不同的構建場景 - >例如使用兩個不同的JDK版本配置兩個不同的buiild設置?我在NetBeans中使用過它,我相信它也是Eclipse提供的功能。改變JAVA_HOME可以工作,但如果你經常這樣做,會很煩人。 – hovanessyan

回答

2

默認情況下,類是根據bootstrap(irt.jar中的運行時類,i18n.jar中的國際化類等)以及javac附帶的平臺的擴展類編譯的。所以如果您運行'javac .exe',它會從1.6.0_17中的「rt.jar」加載Java API類,而不是從1.6.0_25加載。

但是javac還支持交叉編譯,其中類是針對不同Java平臺實現的引導程序和擴展類編譯的。

多見於:Cross Compilation如果你想使用

+0

好的答案,簡短而準確。 +1! –

+0

啊,我認爲API類是獨立於引導程序和擴展類的東西,我猜應該仔細閱讀。這很有意義。感謝您的建議,交叉編譯也適用於我。 –

+0

它很高興能幫到你,也讓你感到高興。 :-) –

2

將JAVA_HOME環境變量設置爲所需的JDK。還要更改PATH環境變量以包含所需的JDK bin目錄。

+0

另請注意,Java具有解析共享庫的CLASSPATH的概念,因此op可能需要相應地調整它。 –

+0

我不認爲這會對javac產生任何影響。有些工具,比如Ant,用它來找出默認的JDK路徑。但提問者沒有指定任何構建工具。 –

+0

Ant參與其中,但我使用'fork'和'executable'屬性強制它將'javac.exe'作爲一個單獨的進程啓動。我遇到了麻煩,Ant試圖從tools.jar啓動'javac',這就是爲什麼我要解決所有這些問題。 –