将 ByteBuddy 重新打包为库的正确方法

作者: qwwdfsad创建于 2019年6月19日更新于 2022年12月20日
标签enhancementquestion

我们在 kotlinx.coroutines 中有一个特殊的"调试"库,它使用 ByteByddy 来重新定义一些类,以提高用户体验。 我们的 API 形状有两种模式: 1) 使用自动附加机制的程序化 API。一切都运行正常,用户在 classpath 中有我们的 jar(以及 ByteBuddy)。 2) 附加机制。如果用户已经在 classpath 中有自己的应用程序,而没有我们的库,我们不希望强制他们重新编译项目。 因此,为了使其尽可能简单,我们需要将 ByteBuddy 映射到我们的库中,以便使用 `java -jar myapp.jar -javaagent:kotlinx-coroutines-debug.jar`。 但是,这样做会对其他使用 ByteBuddy 的库产生影响,尤其是在不兼容版本的情况下。为了避免这种情况,我们不仅要映射 ByteBuddy,还要重新打包 ByteBuddy。 这在大多数情况下都运行正常,但如果目标应用程序使用了也使用 ByteBuddy 的库(例如 Spring 或 Mockito),则会出现 `java.lang.UnsatisfiedLinkError: Native Library /.../jre/lib/amd64/libattach.so 已在另一个类加载器中加载` 的错误。 因此,问题在于,如何获得一个适合附加的自包含的 JAR,并且还能与使用 ByteBuddy 的其他库一起正常工作?

内容来源: raphw/byte-buddy