Как скомпилировать сам JDK - PullRequest
1 голос
/ 26 июля 2010

Я хочу скомпилировать сам JDK. Я хочу изменить String.class в jdk, чтобы увидеть созданные строковые объекты в системе. Есть ли способ изменить классы в JDK? Когда я пытаюсь изменить исходный код путем изменения файла rt.jar, я получаю сообщение об ошибке.

java.lang.NullPointerException
        at java.util.Hashtable.put(Hashtable.java:394)
        at java.lang.System.initProperties(Native Method)
        at java.lang.System.initializeSystemClass(Unknown Source)

Возможно, есть проблема с подписью.

Ответы [ 4 ]

1 голос
/ 26 июля 2010

Это не похоже на проблему с подписью. Похоже, вы изменили что-то, что заставляет Hashtable разыменовать нулевой указатель. Просмотрите внесенные вами изменения и посмотрите, почему они это делают. Напомним, что в некоторых случаях Java сохраняет внутренние ссылки на строковые константы. Я предполагаю, что ты сломал один из них.

0 голосов
/ 26 июля 2010

При установке JDK вы также можете установить исходники.Сделай так.Или скачать исходники отдельно.Затем

  • разверните файл src.zip и получите файл String.java.
  • создайте новый проект, содержащий String.java в пакете java/lang.
  • измените его в соответствии с вашими потребностями.
  • просто скомпилируйте его.
  • поместите класс в путь к загрузочному классу вашего JDK.См. Больше информации о Bootclassbath .
  • Запустите ваше приложение.

java -Xbootclasspath/p:<changed String classpath> -cp <regular classpath> <your application main class>

Но изменение JDK может быть не очень хорошей идеейи вам не разрешено отправлять измененный JDK (по крайней мере до 1.6) из-за лицензионных ограничений.

И да, ваша проблема, скорее всего, где-то еще.Помните выбор не сломан ; -)

0 голосов
/ 26 июля 2010

Возможно, есть другой способ: вы загружаете исходный код java.lang.String, вносите свои изменения и компилируете только этот класс.

Когда вы запускаете основную программу, будьте внимательны при загрузке классов: сначала загрузите ваш класс String, а затем классы времени выполнения Java. Обратитесь к руководству java и опциям -Xbootclasspath / p, чтобы сделать это в правильном порядке.

0 голосов
/ 26 июля 2010

Есть ли способ изменить классы в jdk?

Что ж, вы можете загружать, изменять и собирать выпуски OpenJDK Java 6 из исходного кода. Информация о том, как это сделать, есть на сайте OpenJDK .

Но учтите, что изменения в низкоуровневых классах Java (например, String) могут иметь эффекты, которые трудно понять даже не специалисту. И следствием может быть отказ JVM, который приводит к неработоспособности println или printStackTrace().

...