javac如何定位Java API类?

时间:2011-10-31 18:31:01

标签: java javac

关于this page的信息提供了一些很好的提示和一般信息,但没有结论。

我知道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完全相同的版本,以确保兼容性。

2 个答案:

答案 0 :(得分:2)

将JAVA_HOME环境变量设置为所需的JDK。还要更改PATH环境变量以包含所需的JDK bin目录。

答案 1 :(得分:2)

默认情况下,类是根据引导程序(rt.jar中的运行时类,i18n.jar中的国际化类,以及其他类)和javac附带的平台的扩展类编译的。如果您运行'javac。 exe'来自jdk1.6.0_17,是否会从1.6.0_17中的'rt.jar'加载Java API类,而不是从1.6.0_25加载。

但javac还支持交叉编译,其中类是针对不同Java平台实现的引导程序和扩展类编译的。

如果您想使用

,请参阅:Cross Compilation