Александр Токарев — Патчим байт-код сторонних библиотек в рантайме

Александр Токарев — Патчим байт-код сторонних библиотек в рантайме

990 Lượt nghe
Александр Токарев — Патчим байт-код сторонних библиотек в рантайме
Ближайшая конференция — JPoint 2025, 3–4 апреля (Москва + трансляция). Подробности и билеты: https://jrg.su/T2zfbS — — Скачать презентацию с сайта Joker — https://jrg.su/cOjX1n При использовании сторонних библиотек иногда возникает необходимость в доработке их исходного кода. В таких случаях, как правило, делается форк исходной библиотеки, в который вносятся нужные модификации. Но что делать, если такой возможности у нас нет? Например, библиотека с закрытым исходным кодом либо есть иные ограничения на добавление модифицированной библиотеки к основному проекту. В докладе Александр рассказал о способе, который разработали для патчинга Apache Spark в рантайме через хук на classloader c помощью JVM-функции javaagent и библиотеки Javassist, позволяющей манипулировать байт-кодом JVM на высоком уровне. Сначала он объяснил, как пришли к этому способу, вдохновившись технологией monkey patching в Python. Затем показал, как можно поставить хук на classloader, используя javaagent. В основной части доклада обсудили, как можно изменять байт-код на высоком уровне абстракции, и рассмотрели библиотеки, позволяющие это делать. Затем спикер показал четыре разных способа, которые придумали для патчинга исходных классов библиотеки, и как их реализовали с использованием библиотеки Javaassist. В заключение Александр немного порассуждал о том, насколько этот способ удобен и надежен и как тестировать патченные классы.