Как скомпилировать класс Java с помощью javac без каких-либо зависимостей даже от базовых классов, таких как java.lang.*?

Я хочу «воссоздать» J2ME/CLDC с помощью последней версии javac (например, 11.0.19) и скомпилировать специально созданную Java-программу без каких-либо или минимальных базовых классов. Очевидно, что такие классы, как java.lang.Object или java.lang.String (и т. д.), должны присутствовать, поскольку они являются основной функцией. Но кроме этого я хочу предоставить свои собственные классы, специфичные для устройства (например, с собственными привязками) и использовать стандартный компилятор javac.

Я уже немного повозился с вариантами --module-source-path, -profile, --class-path (и другими), но многого не добился. Документация по этим коммутаторам также очень «тонкая».

Есть ли лучшая документация или возможно ли вообще получить ожидаемый результат?

Все, что есть в java.lang, является ядром.

ControlAltDel 18.04.2024 20:21

Почему важно избегать зависимостей?

ControlAltDel 18.04.2024 20:25

Вы даже не можете правильно определить эту проблему. Каждый класс Java наследуется от java.lang.Object. Каждый строковый литерал представляет собой String. Так где именно вы проводите линию?

user207421 19.04.2024 00:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Как скомпилировать класс Java с помощью javac без каких-либо зависимостей даже от базовых классов, таких как java.lang.*?

Первым шагом будет поиск или подготовка файла JAR (или файлов), содержащего файлы классов для всех «основных» классов. Для J2ME/CLDC у вас должна быть возможность получить существующий файл JAR из существующего дистрибутива. Обратите внимание, что javac нужны только подписи API для классов, поэтому вы можете использовать JAR, содержащий классы-заглушки; то есть классы без каких-либо фактических деталей реализации.

Затем вы используете опцию -bootclasspath1, чтобы указать javac, где найти основные зависимости. Например:

javac ... -bootclasspath /path/to/cldc.jar ... Hello.java

1 - Or --boot-class-path or -Xbootclasspath. Check the javac documentation for the Java JDK version that you are using.

Спасибо! Я нашел действительно минимальный cldc-1.0.jar, который содержит самые основы, и с javac -verbose --boot-class-path ./cp -target 8 -source 8 Test.java он сразу заработал. Я не понимаю, почему у меня было столько проблем, но, похоже, это то, что я искал.

mythbu 19.04.2024 20:43

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