Как javac находит классы API Java? - PullRequest
1 голос
/ 31 октября 2011

Информация на этой странице содержит несколько полезных советов и общую информацию, но не содержит никаких окончательных данных.

Я знаю, что javac.exe в основном просто запускает файл sun.tools.javac.Main.из «tools.jar» с использованием Java.Я также знаю, что классы Java API хранятся в «rt.jar» в «jre / lib» под JDK.Это где javac.exe загружает классы Java API?

Мне интересно, в частности, об этом сценарии: предположим, я установил jdk1.6.0_17, а позже я установил jdk1.6.0_25.Если я запускаю «javac.exe» из jdk1.6.0_17, загрузит ли он классы API Java из «rt.jar» в 1.6.0_17 или 1.6.0_25?

Причина, по которой я хочу знать всея нахожусь в ситуации, когда я знаю, что код, который я собираю, будет работать на определенной (не самой последней) версии Java, и я хочу скомпилировать, используя ту же самую точную версию javac и API Java дляобеспечить совместимость.

Ответы [ 2 ]

2 голосов
/ 31 октября 2011

По умолчанию классы компилируются с помощью начальной загрузки (классы времени выполнения в rt.jar, классы интернационализации в i18n.jar и другие) и классов расширения платформы, с которой поставляется javac. Так что да, если вы запускаете 'javac. exe 'из jdk1.6.0_17, будет ли он загружать классы API Java из' rt.jar 'в 1.6.0_17, а не из 1.6.0_25.

Но javac также поддерживает кросс-компиляцию, когда классы компилируются с использованием классов начальной загрузки и расширения другой реализации платформы Java.

Подробнее см .: Кросс-компиляция , если вы хотите использовать

2 голосов
/ 31 октября 2011

Установите переменную окружения JAVA_HOME на желаемый JDK. Также измените переменную среды PATH, чтобы она содержала желаемый каталог bin JDK.

...