powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Загрузить свой класс в чужой класслоадер
8 сообщений из 8, страница 1 из 1
Загрузить свой класс в чужой класслоадер
    #39903283
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Есть сгенерированный мной класс в виде byte[] . Есть какой-то класслоадер. Мне надо вкинуть свой код в этот класслоадер.

Сейчас это делается с помощью вызова java.lang.ClassLoader#defineClass(java.lang.String, byte[], int, int) - но это protected метод и jdk 11 при вызове setAccessible пишет All illegal access operations will be denied in a future release .

Какие есть другие способы загрузить свой код в предопределённый класслоадер?

PS: нет, наследовать нельзя- это кодогенерация в maven-плагине.
...
Рейтинг: 0 / 0
Загрузить свой класс в чужой класслоадер
    #39903402
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin
Добрый день!

Есть сгенерированный мной класс в виде byte[] . Есть какой-то класслоадер. Мне надо вкинуть свой код в этот класслоадер.

Сейчас это делается с помощью вызова java.lang.ClassLoader#defineClass(java.lang.String, byte[], int, int) - но это protected метод и jdk 11 при вызове setAccessible пишет All illegal access operations will be denied in a future release .

Какие есть другие способы загрузить свой код в предопределённый класслоадер?

PS: нет, наследовать нельзя- это кодогенерация в maven-плагине.


Не ну а чего, нормально - загрузил вебапп и из него докинул кода в jboss) Очень странные у вас хотелки, граничащие с УК
...
Рейтинг: 0 / 0
Загрузить свой класс в чужой класслоадер
    #39903406
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin


PS: нет, наследовать нельзя- это кодогенерация в maven-плагине.


Так и не понял, что будет финальным артефактом и в какое время надо инжектнуть свой код. Кодогенерация работает до компайла, почему код не попадает в джарку? Зачем нужны пляски с класслоадером?
...
Рейтинг: 0 / 0
Загрузить свой класс в чужой класслоадер
    #39903419
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
Alexey Tomin


PS: нет, наследовать нельзя- это кодогенерация в maven-плагине.


Так и не понял, что будет финальным артефактом и в какое время надо инжектнуть свой код. Кодогенерация работает до компайла, почему код не попадает в джарку? Зачем нужны пляски с класслоадером?


Кодогенерация вставляет в класс код. Но надо создать ещё inner class'ы, которых вообще не было.
А вот это сейчас реализовано через указанный метод.
Хотя можно подумать, как НЕ создавать inner class'ы, но это дофига работы будет.
...
Рейтинг: 0 / 0
Загрузить свой класс в чужой класслоадер
    #39903429
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin
забыл ник
пропущено...


Так и не понял, что будет финальным артефактом и в какое время надо инжектнуть свой код. Кодогенерация работает до компайла, почему код не попадает в джарку? Зачем нужны пляски с класслоадером?


Кодогенерация вставляет в класс код. Но надо создать ещё inner class'ы, которых вообще не было.
А вот это сейчас реализовано через указанный метод.
Хотя можно подумать, как НЕ создавать inner class'ы, но это дофига работы будет.

Все равно не понимаю. Что иннер, что не иннер. Если проблема в том что эти файлы как-то создаются уже после компиляции, то значит вы не вовремя вызываете компиляцию. Сначала кодогенерация(кстати опять же непонятно, вам надо создать файлы java с кодом который нужно скомпилировать или уже .class файлы?) потом компиляция - потом упаковка - потом исполнение. Ну вот вообще не вижу проблем. Во время работынад richfaces, мы по темплету генерировали туеву кучу для рендереров, конвертеров, валидаторов и тд, там чуть ли не половина кода была сгенерирована
...
Рейтинг: 0 / 0
Загрузить свой класс в чужой класслоадер
    #39903442
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
Все равно не понимаю. Что иннер, что не иннер. Если проблема в том что эти файлы как-то создаются уже после компиляции, то значит вы не вовремя вызываете компиляцию. Сначала кодогенерация(кстати опять же непонятно, вам надо создать файлы java с кодом который нужно скомпилировать или уже .class файлы?) потом компиляция - потом упаковка - потом исполнение. Ну вот вообще не вижу проблем. Во время работынад richfaces, мы по темплету генерировали туеву кучу для рендереров, конвертеров, валидаторов и тд, там чуть ли не половина кода была сгенерирована


Это да, на этапе компиляции. org.apache.maven.plugin.AbstractMojo цепляется на
Код: java
1.
<goal>instrument</goal>

.
При этом добавляется байткод в клас и создаётся дополнительные классы.
При этом сделано через защищённые методы класслоадера.

PS: решил посмотреть как сделано в byte-buddy . Там не то, чтобы setAccessible зовётся, там даже sun.misc.Unsafe через задних проход достаётся.

Вот уж где трэш
...
Рейтинг: 0 / 0
Загрузить свой класс в чужой класслоадер
    #39903453
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Загрузить свой класс в чужой класслоадер
    #39903478
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник


Не о том- я ж создаю класс, а не читаю.

Вообще там глобально вводится ограничение на то, что лезть в кишки класс можно либо внутри модуля, либо в модуль, который opens для твоего. Естественно, что java.base не открыт для моего модуля. Да он никому не открыт.

Если же я не указываю модуль, то ошибки нет, но зато есть предупреждение...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Загрузить свой класс в чужой класслоадер
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]