3

アプリケーションの起動時間を短縮するために、javaagent の代わりに Maven プラグインを使用できますか? 多くの ORM ツールには javaagent と maven プラグインの両方が含まれているため、可能であるはずです。または、少なくとも「CompiledClassFilesBuilder」のようなもので、AgentBuilder と機能が似ています :-)

よろしく、パベル

4

1 に答える 1

5

Maven プラグイン内から Byte Buddy を使用することは完全に可能です。コンパイル段階の後に Maven ターゲットの ClassFileLocator を実装し、ByteBuddy インスタンスを使用してこのフォルダー内のクラスを再定義できます。API は、トランスフォーマー内の AgentBuilder の API と同じです。

ただし、そのようなプラグインを実装する必要があります。現在存在するものはありません。

ただし、この静的変換には制限があることに注意してください。プラグインを使用して、VM のブートストラップ クラスを再定義することはできません。ライブラリ クラスは外部アーティファクトであるため、変更することも困難です。最後に、Byte Buddy は、wt ランタイムを設定する必要があるライブ コールバックを登録できます。

更新: 問題のプラグインを追加したところ、バージョン 1.4.21 で Maven Byte Buddy プラグインをリリースします。変換は次のように追加できます。

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

関連する 2 つのインターフェイスPluginEntryPointは、ライブラリに直接追加され、簡単に実装できます。

于 2016-08-06T15:00:46.063 に答える