JEP draft: JDK Source Structure
Структура исходного кода JDK
| Ответственный | Magnus Ihse Bursie |
| Тип | Informational |
| Область | JDK |
| Статус | Draft |
| Компонент | infrastructure |
| Создан | 2022/03/15 23:29 |
| Обновлён | 2026/03/20 08:15 |
| Задача | 8283227 |
Аннотация
Этот информационный JEP описывает общую организацию и структуру исходного кода JDK и связанных с ним файлов в репозитории JDK.
Мотивация
Понятная и явно описанная структура помогает разработчикам понимать, как связан код и где он находится. Она снижает риск «споров о мелочах» (bike shedding), упрощает сопровождение кода и позволяет инженерам сосредоточиться на существенных аспектах функциональности, а не на поверхностной организации кода.
Структура основной части исходного кода JDK, расположенной в src/$MODULE, была описана в JEP 201 (Modular Source Code). Однако адаптация структуры исходного кода — непрерывный процесс, и этот информационный JEP можно при необходимости обновлять.
Описание
Корневой каталог репозитория JDK содержит следующие каталоги:
srctestmakedocbin
Корневой каталог также содержит строго ограниченный набор отдельных файлов. К ним относятся необходимые юридические документы, информация для участников и необходимые файлы системы сборки. Прежде чем добавлять новые файлы в корневой каталог, следует проявлять большую сдержанность, и по возможности этого следует избегать.
Каталог src
Каталог src содержит исходный код, из которого собирается JDK. Он состоит из отдельных каталогов для модулей, из которых состоит JDK, и отдельного каталога для JVM HotSpot.
Обзор структуры каталога src:
src/hotspot/share/
cpu/$CPU/
os/$OS/
os_cpu/$OS_$CPU/
$MODULE/{share,$OS}/classes/$PACKAGE/
native/include/
common/
lib$LIBRARY/
$EXECUTABLE/
man/
legal/
data/
conf/
lib/
utils/
-
src/hotspotсодержит исходный код HotSpot. Код HotSpot написан на C++.-
src/hotspot/shareсодержит общий, кроссплатформенный код. -
src/hotspot/cpu/$CPUсодержит код, зависящий от конкретного процессора.$CPUобозначает конкретную процессорную архитектуру, напримерaarch64,x64и т. д. -
src/hotspot/os/$OSсодержит код, зависящий от конкретной операционной системы.$OSобозначает конкретную ОС или семейство ОС, напримерlinux,windowsи т. д. Обратите внимание, что по историческим причинамunixназываетсяposix, аmacosназываетсяbsd. -
src/hotspot/os_cpu/$OS_$CPUсодержит код, зависящий одновременно от конкретной ОС и конкретного процессора.
Имена файлов в
src/hotspot/cpu/$CPUобычно оканчиваются на_$CPU.{hpp,cpp}. Аналогично имена файлов вsrc/hotspot/os/$OSиsrc/hotspot/os_cpu/$OS_$CPUобычно оканчиваются на*_$OS.{hpp,cpp}и*_$OS_$CPU.{hpp,cpp}соответственно. -
-
Набор каталогов
src/$MODULEсодержит исходный код отдельных модулей JDK.$MODULE— имя модуля (например,java.base).Каталог
shareсодержит общий, кроссплатформенный код и связанные с ним файлы.Каталог
$OSсодержит код, специфичный для операционной системы, и связанные с ним файлы.$OSобозначает конкретную ОС или семейство ОС, напримерunix,windowsи т. д. Обратите внимание, что по историческим причинамmacosназываетсяmacosx.-
src/$MODULE/{share,$OS}/classesсодержит исходные файлы Java и файлы ресурсов, организованные в дерево каталогов, отражающее иерархию$PACKAGEих API. -
src/$MODULE/{share,$OS}/native/includeсодержит заголовочные файлы C или C++, предназначенные для экспорта для внешнего использования (например,jni.h). -
src/$MODULE/{share,$OS}/native/commonсодержит исходные или заголовочные файлы C или C++, общие для нескольких нативных библиотек или исполняемых файлов этого модуля. -
src/$MODULE/{share,$OS}/native/lib$LIBRARYсодержит исходные файлы C или C++, из которых будет собрана разделяемая библиотека или DLL с именем$LIBRARY. Например, файлы вsrc/java.base/share/native/libjavaбудут скомпилированы вjava.dll,libjava.soилиlibjava.dylibв зависимости от платформы. -
src/$MODULE/{share,$OS}/native/$EXECUTABLEсодержит исходные файлы C или C++, из которых будет собран исполняемый двоичный файл с именем$EXECUTABLEили$EXECUTABLE.exeв зависимости от платформы. -
Каталог
manсодержит man-страницы в формате nroff или Markdown. -
Каталог
legalсодержит юридические уведомления для включённого кода 3-х сторон в формате Markdown. -
Каталог
dataсодержит файлы данных, необходимые для сборки модуля. -
Каталог
confсодержит конфигурационные файлы, предназначенные для редактирования конечными пользователями. -
Каталог
libсодержит конфигурационные файлы, не предназначенные для редактирования конечными пользователями.
-
-
src/utilsсодержит автономные утилиты, призванные помогать разработчикам JDK. Каждая утилита находится в отдельном каталоге внутриsrc/utils, но структура отдельных утилит не определяется
Непосредственно в src могут присутствовать дополнительные унаследованные каталоги, но новые такие каталоги добавлять не следует.
Каталог test
Каталог test содержит код для запуска тестов JDK или файлы, необходимые для написания или запуска тестов.
Обзор структуры каталога test:
test/hotspot/gtest/
jtreg/
jdk/
langtools/
micro/
make/
lib/
lib-test/
-
test/hotspot/gtestсодержит модульные тесты на основе GTest для кода вsrc/hotspot. -
test/hotspot/jtregсодержит тесты на основе JTReg для кода вsrc/hotspot. -
test/jdkиtest/langtoolsсодержат тесты на основе JTReg для кода вsrc/$MODULE. По историческим причинам тесты некоторых модулей находятся вtest/langtools, а не вtest/jdk. -
test/microсодержит микробенчмарки, т. е. тесты, предназначенные для проверки производительности одной чётко определённой задачи. -
test/makeсодержит тесты, проверяющие систему сборки. -
test/libсодержит различный код, помогающий писать или выполнять другие тесты. -
test/lib-testсодержит тесты, проверяющиеtest/lib.
Каталог test также содержит несколько других каталогов для различных особых случаев тестирования. Прежде чем добавлять новые каталоги непосредственно в test, проявляйте большую сдержанность.
Каталог make
Каталог make содержит файлы, используемые системой сборки JDK или связанные с ней.
Обзор структуры каталога make:
make/conf/
modules/$MODULE/
-
make/confсодержит основную конфигурацию сборки JDK. -
Набор каталогов
make/modules/$MODULEсодержит фрагменты makefile для отдельных модулей, которым требуется особая обработка при сборке или которым нужно переопределить настройки сборки по умолчанию.
Остальные файлы и каталоги в make зависят от реализации системы сборки и могут меняться.
Каталог doc
Каталог doc содержит документацию, которая может быть полезна разработчикам JDK.
Документация помещается в каталог doc, если она соответствует следующим критериям:
-
она не предназначена для поставки вместе с собранным JDK,
-
она ориентирована на разработчиков JDK, а не на пользователей JDK, и
-
её содержание привязано к конкретному выпуску или иным образом связано с текущим содержимым репозитория.
Документация в doc обычно предоставляется в двух форматах, Markdown и HTML, которые обновляются синхронно.
Каталог bin
Каталог bin содержит набор скриптов, которые могут помогать разработчикам JDK в различных задачах.
Права на выполнение не установлены ни для файлов в этом каталоге, ни для каких-либо других файлов в репозитории JDK.