自注入 java 代理

Self-injecting java agent

我正在尝试创建一个自注入 java 代理。代理和动态加载代理的代码将包含在同一个 jar 文件中。

我试图通过在清单文件中同时定义 Main-ClassAgent-Class 来做到这一点。这是文件:

Manifest-Version: 1.0
Main-Class: myjar.injector
Agent-Class: myjar.agent

但是,当我 运行 jar 时,出现以下错误: com.sun.tools.attach.AgentLoadException: Agent JAR not found or no Agent-Class attribute

当我检查编译后的 jar 时,jar 的清单文件中只有一个 Main-Class 属性。我尝试在 IDE 之外重新编译,但仍然只有 Main-Class 属性。

有没有办法在一个 jar 文件中同时包含 Main-ClassAgent-Class

是的。把它放在那里。您有一些将 java 源文件转换为 jar 文件的过程。我希望它是 Maven 或 gradle 或其他构建系统。它可能是 IDE 或手写脚本。这没什么神奇的:你的工具链搞砸了。

您随时可以按如下方式查看清单:

jar xvf myjar.jar META-INF/MANIFEST.MF
cat META-INF/MANIFEST.MF