如何从中加载JavaAgent并运行方法?

时间:2014-03-20 15:29:12

标签: java jar classloader executable-jar javaagents

我是JavaAgent概念的新手,所以也许这个问题并不复杂。但我希望一些讨论和知识安排会有所帮助(不仅对我而言)。

那么 - 我想做什么? 我想在启动应用程序时加载外部jar库。这个外部库正在开发中,并在ARM(Nexus)上进行版本控制,并包含my_app中必不可少的功能。

我的尝试:

  1. 下载想要的lib版本(这里没问题 - 在正确的地方得到了正确的func_version.jar)

  2. 我添加了下载的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;  
        }  
    }  
    
  3. 修改lib中的META-INF/MANIFEST.MF(添加行:Premain-Class: JavaAgent

  4. 尝试通过将JavaAgent作为JVM参数传递来加载JavaAgent:

    java -javaagent:/home/func_1.0.1.jar /home/my_app/MyStartup
    
  5. MyStartup.java包含my_app的主要方法。

    我知道这些步骤还不够(还看不到任何结果)。但这是一种正确的方法吗?还有什么我需要做的才能看到想要“JavaAgent加载!”在控制台输出?是否需要使用Java ClassLoader?

0 个答案:

没有答案