[英]ByteBuddy java agent results in noclassdeffound error
對於使用 Bytebuddy 編寫的簡單代理,我收到以下錯誤。 我有一個簡單的演示應用程序,它基於 spring 引導並嘗試使用下面的簡單 java 代理代碼片段運行它。
public static void premain(String agentArgs, Instrumentation inst) {
System.out.println("Agent Loaded");
new AgentBuilder.Default()
.with(AgentBuilder.Listener.StreamWriting.toSystemOut())
.type(hasSuperType(named("javax.sql.DataSource")))
.transform((builder, type, classLoader, module) ->
builder.visit(
Advice.to(VariableAdvice.class).on(isMethod())
)
)
.installOn(inst);
}
建議代碼
import net.bytebuddy.asm.Advice;
public class VariableAdvice {
@Advice.OnMethodEnter
static void OnEnter() {
System.out.println("Hello ByteBuddy");
}
}
聚甲醛
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>1.10.19</version>
</dependency>
更多的
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Premain-Class>com.abc.Agent</Premain-Class>
<Agent-Class>com.abc.Agent</Agent-Class>
<!-- <Main-Class>com.abc.Agent</Main-Class>-->
<Can-Redefine-Classes>true</Can-Redefine-Classes>
<Can-Retransform-Classes>true</Can-Retransform-Classes>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
在 Intellij 中時出現以下錯誤
"C:\Program Files\Java\jdk1.8.0_261_deleteword\bin\java.exe" -
Exception in thread "main" java.lang.NoClassDefFoundError: net/bytebuddy/dynamic/DynamicType$Builder
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethod(Class.java:2128)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:327)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Caused by: java.lang.ClassNotFoundException: net.bytebuddy.dynamic.DynamicType$Builder
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 5 more
FATAL ERROR in native method: processing of -javaagent failed
我假設您創建了一個 jar 文件,其中包含作為代理的類並包含premain
方法。 由於您使用的是 Maven,因此默認情況下,您的項目依賴項將不包含在此創建的 jar 文件中。
You will need to create a fat jar (" uber jar ") that also contains Byte Buddy where Maven offers the Maven Shade plugin to do so.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.