gpt4 book ai didi

java - 当使用 -javaagent 启动 JVM 时,我应该如何在 manifest.mf 中指定我的 Premain-class

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:49 27 4
gpt4 key购买 nike

我目前正在尝试使用 Java Instrumentation,但我什至无法使用 -javaagent arg 启动 JVM 并获得 ClassNotFoundException。

我有一个名为 TestInstrumentation 的简单测试项目。它有一个 src 文件夹,其中包含一个名为 testinstrumentation 的包。里面是:TestInstrumentation.java 和TestAgent.jar。

这是我的 TestAgent.jar 的 manifest.mf 的内容:

Manifest-Version: 1.0
Premain-Class: TestAgent
Created-By: 1.8.0_45 (Oracle Corporation)

测试代理.java:

package testinstrumentation;

import java.lang.instrument.Instrumentation;

public class TestAgent {
public static void premain(String agentArgument, Instrumentation instrument) {
System.out.println("Java Agent Loaded!");
}
}

测试仪器.java:

package testinstrumentation;

public class TestInstrumentation {
public static void main(String[] args) {
System.out.println("Main Class");
}

}

这是我尝试运行它时的堆栈跟踪:

java.lang.ClassNotFoundException: TestAgent
FATAL ERROR in native method: processing of -javaagent failed
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:304)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Exception in thread "main" Java Result: 1

我很确定错误出在我 jar 的 manifest.mf 中的 Premain 类规范中。任何关于如何纠正这个问题的建议都将不胜感激!

最佳答案

这听起来更像是一个包装问题。一般来说,您做对了:您必须在 list 中指定以下内容。

Premain-Class: testinstrumentation.TestAgent

当然,testinstrumentation.TestAgent 类文件应该位于同一个 jar 中。从你的堆栈跟踪中我看到它看起来在 src.testinstrumentation 但是你的代码应该被放入 testinstrumentation包裹

我推荐阅读 Not so secret Java agents教程系列(4 部分)。这很好地概述了 Java 代理的功能。

关于java - 当使用 -javaagent 启动 JVM 时,我应该如何在 manifest.mf 中指定我的 Premain-class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33730305/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com