Компиляция исходного кода Java 8 JDK с помощью компилятора командной строки javac

Не могли бы вы посоветовать, как можно скомпилировать исходные файлы 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

Действия по воспроизведению:

  • исходная и целевая версия - Java 8
  • sourcepath содержит каталог всех классов Java (извлеченный из src.zip, найденного в JDK/)
  • rt.jar находится в JDK_HOME\jre\lib и содержит необходимые классы, с которыми должен быть скомпилирован исходный код.
  • filelist.txt содержит все найденные в файле src.zip классы, которые необходимо скомпилировать (извлечь с помощью команды dir /B /S /X jdk_src\*.java > filelist.txt
  • мы выводим логи в log.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). Не могли бы вы объяснить, почему исходный код не компилируется, поскольку файлы пути к классам передаются компилятору?

Любая обратная связь будет оценена.

Спасибо.

В Windows элементы пути должны быть разделены точкой с запятой (;) вместо двоеточия (:). В качестве примечания: не должно быть необходимости указывать путь как classpath, если вы уже указали его как bootclasspath. На самом деле, если javac происходит из того же JDK, ни в том, ни в другом нет необходимости, поскольку путь к классу загрузки уже содержит правильные элементы (за исключением текущего каталога, но в любом случае не должно быть причин включать . в путь)

Holger 16.03.2022 11:10

Спасибо, Хольгер, ваша рекомендация решила мою проблему!

TechQuestion 16.03.2022 11:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Исходный код 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/… ). Спасибо еще раз!

TechQuestion 16.03.2022 11:46

Привет, Стивен, сборка OpenJDK для Java 8 на git скомпилирована с отладочной информацией? Если да, то это можно использовать и для отладки моего проекта в eclipse.

TechQuestion 16.03.2022 11:52

Как я уже сказал, вы можете настроить флаги компиляции. Прочтите инструкцию по сборке.

Stephen C 16.03.2022 12:14

Другие вопросы по теме

Предупреждение Reactjs: каждый дочерний элемент в списке должен иметь уникальную «ключевую» опору
Неизвестная ошибка слова из плагина CSS Minimizer в сборке React
Невозможно использовать структуру, определенную в другом классе, даже после использования охранников
Неопределенные ссылочные ошибки в преобразователе изображений ros в opencv
Как я могу исправить ошибку при проверке сложного оператора sql в комнате в студии Android во время компиляции?
Вызов функции, требующей gil, не разрешен без ошибки компиляции gil с C++
Не удалось загрузить файл aapt2-windows.jar (com.android.tools.build:aapt2:3.4.2-5326820): кешированная версия недоступна для автономного режима
Проблема при компиляции простой программы на C++
Создание JPanels с заголовком в цикле for из пользовательского ввода
Ошибка при запуске файла в определенной папке, в то время как тот же файл без проблем запускается в других папках