Как перекомпилировать Java Runtime Environment (JRE)? - PullRequest
3 голосов
/ 04 марта 2010

Я думал, что это будет очень легко. Я скачал JDK, распаковал src.zip, изменил JDK в соответствии со своими потребностями и сохранил файл.

Теперь единственное, что мне нужно сделать, это перекомпилировать извлеченную и обновить папку src в "JRE". Я пытался использовать Javac, но ничего не получилось. Например, я получил ошибку, что исходные файлы не были предоставлены. Я, очевидно, не использую правильный синтаксис для компиляции JRE.

Итак, кто-нибудь может мне сказать, как вы получаете рабочую папку "JRE", содержащую модифицированную среду выполнения Java на основе новой исходной папки, извлеченной из JDK?

Примечание: я не собираюсь распространять сборник. Только для личного использования.

Обновление: благодаря ответу и http://www.javalobby.org/java/forums/t103334.html Я получил следующую команду: "c:\tmp\jdk1.6.0_17\bin\javac" -classpath "c:\tmp\out" -verbose -g -d "c:\tmp\out" -J-Xmx512m -cp "c:\jdk1.6.0_17\jre\lib\rt.jar";"c:\jdk1.6.0_17\lib\tools.jar" @files.txt - к сожалению, пока она, кажется, обрабатывает вещи, когда закончена, выходная папка / out пуста. Что-то не так с моей командой?

Заранее спасибо.

Ответы [ 6 ]

2 голосов
/ 05 марта 2010

Вы не сможете скомпилировать весь JDK Sun / Oracle, учитывая только те источники, которые поставляются с ним, потому что многие из этих классов внутренне используют проприетарные классы в таких пакетах, как com.sun.*, и, конечно, нативные методы - и источник их не включен в JDK. Вы должны получить их через специальный выпуск исходного кода или использовать OpenJDK (и я не знаю, является ли получение нативного материала для работы тривиальным или мучительным). В качестве альтернативы может быть возможно выборочно перекомпилировать только определенные классы - но, конечно, только когда вы не изменяете их таким образом, чтобы сделать их несовместимыми с существующим использованием в JDK.

2 голосов
/ 04 марта 2010

Установите ваш classpath в верхнюю часть директории с исходным кодом экстракта. Скомпилируйте файлы и поместите их файлы .class обратно в rt.jar.

1 голос
/ 05 марта 2010

На всякий случай вы можете скомпилировать OpenJDK , следуя их инструкциям или используя IcedTea (они также предоставляют руководство для сборки OpenJDK без жгута проводов IcedTea).

1 голос
/ 04 марта 2010

Например, я получил сообщение об ошибке, что исходные файлы не были предоставлены.

Вы должны сообщить javac о каждом файле .java, который вы хотите скомпилировать. javac сообщает, что вы не предоставили никаких файлов для его компиляции.

0 голосов
/ 01 декабря 2010

вместо

"c:\tmp\jdk1.6.0_17\bin\javac" -classpath "c:\tmp\out" -verbose -g -d "c:\tmp\out" -J-Xmx512m -cp 

Попробуйте следующее:

set path=C:\tmp\jdk1.6.0_17\bin

нажмите клавишу возврата на вашем компьютере, а затем следующее для класса

C:\tmp>set classpath=.

Снова нажмите клавишу возврата на клавиатуре компьютера. а затем скомпилировать

C:\tmp>javac YourProgramName.java

Для запуска вашей программы

C:\tmp>java YourProgramName
0 голосов
/ 04 марта 2010

Согласно Лицензия Sun :

Ограничения технологии Java. Вы не можете создавать, изменять или изменять поведение или разрешать своим лицензиатам создавать, изменять или изменять поведение классов, интерфейсов или подпакетов, которые в любом случае определены как «java», «javax», « sun "или аналогичное соглашение, указанное Sun в любом обозначении соглашения об именах.

Другими словами, вы не можете распространять измененные копии JVM в любой форме. Если вы хотите это сделать, вам нужно связаться с Sun по поводу лицензирования.

РЕДАКТИРОВАТЬ: @ Том Хотин прав; это относится только к официальной «ванильной» JRE Sun, т. е. конечным пользователям, установленным на их компьютерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...