2016-08-05 2 views
1

Может ли быть maven-плагин вместо javaagent, чтобы сократить время запуска приложения? Многие инструменты ORM имеют как javaagent, так и maven-плагин, поэтому это должно быть возможно - не так ли? Или, по крайней мере, что-то вроде «CompiledClassFilesBuilder» аналогичной по функциональности AgentBuilder :-)Плагин Maven вместо javaagent для Byte Buddy?

С уважением, Павел

ответ

2

Вполне возможно использовать Byte Бадди изнутри плагин Maven. Вы можете реализовать ClassFileLocator для целевой Maven после фазы компиляции и переопределить классы в этой папке с помощью экземпляра ByteBuddy. API идентичен API-интерфейсу AgentBuilder внутри трансформатора.

Вам понадобится реализовать такой плагин. В настоящее время не существует.

Однако учтите, что это статическое преобразование имеет свои ограничения. Используя плагин, невозможно переопределить классы начальной загрузки виртуальной машины. Также было бы сложно изменить классы библиотеки, поскольку они являются внешними артефактами. Наконец, Byte Buddy может регистрировать обратные вызовы в реальном времени, которые должны быть установлены в течение времени выполнения.

UPDATE: Я только что добавил этот плагин и выпустил плагин Maven Byte Buddy в версии 1.4.21. Преобразование может быть добавлен следующим образом:

<plugin> 
    <groupId>net.bytebuddy</groupId> 
    <artifactId>byte-buddy-maven-plugin</artifactId> 
    <executions> 
    <execution> 
     <goals> 
     <goal>transform</goal> 
     </goals> 
    </execution> 
    </executions> 
    <configuration> 
    <transformations> 
     <transformation> 
     <plugin>net.bytebuddy.test.SimplePlugin</plugin> 
     <!-- Optionally, specify groupId, artifactId, version of the class --> 
     </transformation> 
    </transformations> 
    <!-- Optionally, add 'initialization' block with EntryPoint class --> 
    </configuration> 
</plugin> 

Два соответствующие интерфейсы Plugin и EntryPoint добавляются в библиотеку непосредственно и прямо вперед, чтобы реализовать.

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