如何使用 3rd 方库依赖项部署 javaagent

How to deploy javaagent with 3rd party libs dependencies

我们编写了一个 java 代理来帮助开发人员调试。但是,在发布此工具之前,我们对 java-agent.

的部署仍有一些疑问

用户可以将代理与某些 tomcat 应用程序一起使用。代理使用 Premain 方法进行转换 类。我们使用javassist 3.18.2-GA 插码。我们目前在 MANIFEST.MF 中将 javassist.jar 添加到 Boot-Class-Path 中。我们将代理和 javassist.jar 都放入 tomcat 的 lib 目录中。

问题是:

  1. 嗯,至少,它有效。但这是为 tomcat 应用程序部署代理和依赖项的正确方法吗?
  2. 因为大多数 tomcat 应用程序使用 hibernate 也使用 javassist 3.18.2-GA,所以现在没问题。但据我了解,3.20 与 3.18.2 并不完全兼容。建议有人将 javassist 更新到更高版本,代理或应用程序是否会由于 2 个不同的 javassist 之间的冲突而崩溃。

在 VM 的 class 路径上添加了 javaagent 和 运行。因此,您有以下选择:

  1. 在启动 VM 时将依赖项添加到 class 路径,就像部署普通应用程序一样。对于像 Tomcat 这样的应用程序容器,这将是此类依赖项的适当目录。
  2. 使用 fatjar 等工具将依赖项与代理捆绑在一起。这样做,您还可以使用 Maven Shade 插件将依赖项转移到不同的命名空间,以避免版本冲突。
  3. 在 运行 实际代理应用程序之前使用 Instrumentation API 手动附加依赖项。