2011-01-29 2 views
2

Я пытаюсь изменить некоторые классы из открытого jdk, поэтому я создаю ту же структуру пакета, что и открытые классы jdk, и я меняю классы, используя netbeans. Когда я строю проект, если что-то не так в перезаписанных классах, я получаю сообщение об ошибке. Если успешно создать мой проект, кажется, что изменения от моих классов не рассматриваются приложением, вместо этого используются классы open jdk. Любая идея, как я могу использовать мои классы, а не те, которые открываются openjdk?Как перезаписать классы из jdk?

Пример:

если я создать класс sun.net.www.protocol.https.HttpsURLConnectionImpl в моем проекте, и я сделать некоторые изменения в нем, я построить проект, но когда я бегу он приложение мои изменения не отображаются, как используется исходный класс из openjdk, а не мой класс.

ответ

5

вам нужно изменить bootpath-classpath java -X для получения дополнительной информации, вот только тот вариант, который вам нужен в точности.

-Xbootclasspath/p:

И удачи хакерство источник !!

+0

Спасибо, что помогло с тем, чего я хотел достичь – Marius

+0

Да, создайте, исправьте ошибку в jdk – user85155

2

Это то, на что предназначены классы расширения.

Для получения более подробной информации см. http://download.oracle.com/javase/1.5.0/docs/tooldocs/findingclasses.html#javalauncher. Basicall вы либо бросаете банки в папку ext, либо указываете с системными свойствами, что вы хотите перед классом, переопределяя стандартные классы Java.

+0

Значит, это означает, что если у меня есть класс начальной загрузки в моем проекте, загружается один из загрузочного лотка, а не один из моего проекта? – Marius

+0

Чтобы заменить классы, я думаю, вам нужно «одобрить» не 'ext'. Кроме того, это не системное свойство, которое вы хотите изменить, но установить параметр в командной строке. –

+0

@Tom, может быть, и я смущаю его с соглашением Tomcat/Jetty. –

0

Вы должны создать свой класс в своем собственном пакете и вместо этого использовать приложение, использующее этот класс, вместо этого импортируйте свой класс. Таким образом, вы можете создать класс под названием HttpsURLConnectionImpl в пакете com.yourdomain.

Затем в коде приложения убедитесь, что вы импортируете:

import com.yourdomain.HttpsURLConnectionImpl; 

Затем в коде будет использоваться собственный класс.

0

Если у вас есть проблемы с использованием опции -Xbootclasspath, я абсолютно рекомендую следующую страницу, которую я нашел некоторое время назад: https://github.com/adrianmalik/hotspot-overriding-jdk. Существует подробное объяснение того, как использовать эту опцию с хорошим (и рабочим) образцом кода.

+0

Добро пожаловать в StackOverflow! В то время как ответы всегда приветствуются, попробуйте обобщить вопросы, поднятые в ссылке, которую вы предоставляете в своем ответе. Ссылка на страницу может сломаться в будущем, что может [отвлечь ваш ответ] (http://meta.stackexchange.com/a/8259). Несколько предложений, охватывающих ключевые моменты из вашей ссылки, сделают так, чтобы ваш ответ оставался звуковым, даже если ссылка больше не работает :) –

Смежные вопросы