如何使用第三方库依赖项部署javaagent

时间:2016-08-24 02:02:48

标签: java tomcat manifest javassist javaagents

我们编写了一个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之间的冲突,代理或应用程序会崩溃。

1 个答案:

答案 0 :(得分:3)

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

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