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

Mei*_*eng 2 java tomcat manifest javaagents javassist

我们编写了一个 javaagent 来帮助开发人员调试。但是,在发布这个工具之前,我们对java-agent的部署还有一些疑问。

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

问题是:

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

Raf*_*ter 6

添加了一个 javaagent 并在 VM 的类路径上运行。因此,您有以下选择:

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