Не могли бы вы посоветовать, как можно скомпилировать исходные файлы JDK с отладочной информацией с помощью Javac.
Я использую следующую команду:
javac -J-Xms16m -J-Xmx1024m -source 8 -target 8 -sourcepath d:\jdk_src -classpath ".:rt.jar:javax-crypto.jar:ui.jar" -bootclasspath ".:rt.jar:javax-crypto.jar:ui.jar" -d "jdk_debug" -g @filelist.txt >> log.txt 2>&1
Действия по воспроизведению:
dir /B /S /X jdk_src\*.java > filelist.txt
Вместо успешной компиляции классов возникают следующие ошибки:
\jdk\jdk_src\java\lang\reflect\AccessibleObject.java:29: error: package sun.reflect does not exist import sun.reflect.Reflection;
\jdk\jdk_src\java\lang\reflect\AccessibleObject.java:30: error: package sun.reflect does not exist import sun.reflect.ReflectionFactory;
\jdk\jdk_src\java\util\jar\Attributes.java:37: error: package >sun.util.logging does not exist
Эти пакеты присутствуют в предоставленных банках (rt.jar, ui.jar и javax-crypto.jar). Не могли бы вы объяснить, почему исходный код не компилируется, поскольку файлы пути к классам передаются компилятору?
Любая обратная связь будет оценена.
Спасибо.
Спасибо, Хольгер, ваша рекомендация решила мою проблему!
Исходный код Java не предназначен для такой сборки. Что нужно сделать, так это проверить исходное дерево OpenJDK и следовать инструкциям по сборке в исходном дереве. Вы должны иметь возможность настраивать сценарии сборки для компиляции с отладочной информацией... и либо напрямую использовать встроенный файл "rt.jar", либо извлекать нужные классы из артефактов сборки.
Вы можете получить исходный код Java 8 на Github: https://github.com/openjdk/jdk8u. (Другие версии рядом...) Выберите тег git, соответствующий версии Java, которую вы хотите собрать. Ссылки на инструкции по сборке находятся в файле README.md
.
Не совсем понятно, почему компиляция терпит неудачу, когда вы делаете это так, как делаете. Однако компилятор javac
реализует некоторые ограничения, призванные помешать вам компилировать обычный код приложения для внутренних API-интерфейсов в «rt.jar». Часть кода "src.zip", который вы компилируете (законно), зависит от внутренних API.
Привет, Хольгер, Стивен, спасибо вам обоим за ваши идеи, это ценится. Мне удалось скомпилировать исходный код, используя ; вместо :. Мне это нужно для отладки моего кода в eclipse с использованием классов rt.jar, скомпилированных с отладочной информацией (как описано в этом потоке stackoverflow.com/questions/18255474/… ). Спасибо еще раз!
Привет, Стивен, сборка OpenJDK для Java 8 на git скомпилирована с отладочной информацией? Если да, то это можно использовать и для отладки моего проекта в eclipse.
Как я уже сказал, вы можете настроить флаги компиляции. Прочтите инструкцию по сборке.
В Windows элементы пути должны быть разделены точкой с запятой (
;
) вместо двоеточия (:
). В качестве примечания: не должно быть необходимости указывать путь как classpath, если вы уже указали его как bootclasspath. На самом деле, еслиjavac
происходит из того же JDK, ни в том, ни в другом нет необходимости, поскольку путь к классу загрузки уже содержит правильные элементы (за исключением текущего каталога, но в любом случае не должно быть причин включать.
в путь)