2016-08-05 45 views
1

Kann es ein Maven-Plugin anstelle von Java-Agent geben, um die Startzeit einer Anwendung zu reduzieren? Viele ORM-Tools haben sowohl javaagent- als auch maven-Plugin, also sollte es möglich sein - oder? Oder zumindest so etwas wie "CompiledClassFilesBuilder" in der Funktionalität ähnlich zu AgentBuilder :-)Maven Plugin anstelle von Java-Agent für Byte Buddy?

Grüße, Pavel

Antwort

2

Es ist durchaus möglich Byte Buddy zu verwenden aus einem Maven Plugin. Sie können einen ClassFileLocator für das Maven-Ziel nach der Kompilierungsphase implementieren und die Klassen in diesem Ordner mithilfe einer ByteBuddy-Instanz neu definieren. Die API ist identisch mit der des AgentBuilders in einem Transformer.

Sie müssten jedoch ein solches Plugin implementieren. Derzeit gibt es keine.

Beachten Sie jedoch, dass diese statische Transformation ihre Grenzen hat. Mit einem Plugin ist es nicht möglich Bootstrap-Klassen der VM neu zu definieren. Es wäre auch schwierig, Bibliotheksklassen zu ändern, da es sich um externe Artefakte handelt. Schließlich kann Byte Buddy Live-Callbacks registrieren, die wt Runtime gesetzt werden müssen.

UPDATE: Ich habe gerade das Plugin in Frage gestellt und werde ein Maven Byte Buddy Plugin in der Version 1.4.21 veröffentlichen. Eine Transformation kann wie folgt hinzugefügt werden:

<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> 

Die beiden relevanten Schnittstellen Plugin und EntryPoint werden zur Bibliothek hinzugefügt direkt und geradlinig zu implementieren.