使用javaagent获取程序参数

时间:2017-01-11 01:07:23

标签: java

我正在尝试使用javaagent获取主程序agrument。可以说我输入的内容如下:

java -jar -javaagent:[path of agent file] foo.jar arg0 arg1 arg2

javaagent应该打印:

arg0 arg1 arg2

我尝试过使用此代码:

public static void premain(String ignoredArgs, Instrumentation ignoredVar){
    RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
    List<String> arguments = runtimeMXBean.getInputArguments();
    System.out.println(arguments);
}

但它只打印-javaagent参数之前的参数及其自身。 有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

我的方法是使用代理本身来检测所有public static main(String[] args)方法,以将执行重定向到定制侦听器,并传递调用者的参数。

然后,第一次执行侦听器(您感兴趣的主要方法), 您可以访问这些参数,此外还可以禁用 特定的工具(以避免在加载包含主方法的将来的类时产生开销),以及侦听器本身(以防万一,当时已检测到多个主要方法)

答案 1 :(得分:0)

没关系,找到了答案:

System.out.println(System.getProperty("sun.java.command"));