我是JavaAgent概念的新手,所以也许这个问题并不复杂。但我希望一些讨论和知识安排会有所帮助(不仅对我而言)。
那么 - 我想做什么? 我想在启动应用程序时加载外部jar库。这个外部库正在开发中,并在ARM(Nexus)上进行版本控制,并包含my_app中必不可少的功能。
我的尝试:
下载想要的lib版本(这里没问题 - 在正确的地方得到了正确的func_version.jar)
我添加了下载的jar类JavaAgent.java的父目录:
import java.lang.instrument.*;
public class JavaAgent {
private static Instrumentation inst;
public static Instrumentation getInstrumentation() { return inst; }
public static void premain(String agentArgs, Instrumentation inst) {
System.out.println(inst.getClass() + ": " + inst);
System.out.println("JavaAgent LOADED!");
JavaAgent.inst = inst;
}
}
修改lib中的META-INF/MANIFEST.MF
(添加行:Premain-Class: JavaAgent
)
尝试通过将JavaAgent作为JVM参数传递来加载JavaAgent:
java -javaagent:/home/func_1.0.1.jar /home/my_app/MyStartup
MyStartup.java
包含my_app的主要方法。
我知道这些步骤还不够(还看不到任何结果)。但这是一种正确的方法吗?还有什么我需要做的才能看到想要“JavaAgent加载!”在控制台输出?是否需要使用Java ClassLoader?