3

可以有一个 Maven 插件而不是 javaagent 来减少应用程序的启动时间吗?许多 ORM 工具都有 javaagent 和 maven 插件,所以应该是可能的 - 是吗?或者至少类似于“CompiledClassFilesBuilder”的功能类似于 AgentBuilder :-)

问候, 帕维尔

4

1 回答 1

5

完全可以在 Maven 插件中使用 Byte Buddy。您可以在编译阶段之后为 Maven 目标实现 ClassFileLocator,并使用 ByteBuddy 实例重新定义此文件夹中的类。API 与转换器内的 AgentBuilder 相同。

不过,您需要实现这样的插件。目前没有。

但是请注意,这种静态转换有其局限性。使用插件,无法重新定义 VM 的引导类。更改库类也很困难,因为它们是外部工件。最后,Byte Buddy 可以注册需要在运行时设置的实时回调。

更新:我刚刚添加了有问题的插件,并将在 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>

两个相关的接口PluginEntryPoint直接添加到库中,可以直接实现。

于 2016-08-06T15:00:46.063 回答