在Java中,有没有办法获取命令行参数,即使main()没有保存它们?

Uri*_*Uri 5 java command-line-arguments

我们有一个带有main()的程序,它解析某些CLP但不保存在任何地方.然后我有自己的插件代码,需要访问原始的CLP(所以我可以传输更多的参数).但是,我无法改变主()

我看到在C#中显然有一种方法可以做到这一点,我正在寻找Linux上的等效Java解决方案.

更新:显然,我知道main()的工作原理.不幸的是,我无法更改现有的应用程序或它的调用方式(CLP除外).我只能通过沙盒插件代码访问.我的问题是是否有办法获取JVM被调用的命令行(而不是带有-D的环境变量).

Pab*_*jim 4

除了以某种方式在 main 中执行此操作之外,我认为您唯一的其他选择就是下降到操作系统级别并执行一些命令来获取参数。

在 Linux 上,正在运行的进程的 cmd 行参数存储在/proc/ pid /cmdline

因此,要获取它们,您必须找到进程 ID。看这里:

Java程序如何获得自己的进程ID?

然后使用这个 open /proc/ pid /cmdline并解析它。该文件的格式和c中的示例如下:

http://www.unix.com/unix-advanced-expert-users/86740-retriving-command-line-arguments-pspecial-pid.html

最好将这两个调用包装在从 java 调用的一个 shell 脚本中。

请注意,这将是极其不可移植的并且有点hacky。但如果需要必须...