我想知道是否可以从代码中获得用于启动java程序的命令。
例如,如果我用以下方式启动java程序:
java -cp lib1:lib2:... -jar mylib.jar com.foo.Bar我想得到确切的字符串(包括jvm参数)。
有可能吗?
关于赏金和问题的评论
谢谢大家的回应。不幸的是,我没有得到我一直在寻找的答案。我希望有一些可移植的解决方案,从程序本身获得完整的java命令(包括类路径等)。似乎没有可移植的解决方案,而且由于我使用Linux,所以我使用agodinhost和Luigi R. Viggiano的响应来解决我的问题。然而,对于最完整的(便携的)响应,我给了rahulroc赏金。至于其余的人,请投所有人一票:)
发布于 2013-01-02 12:28:07
下面提到的代码应该显示所有JVM参数、传递给main方法的参数以及主类名。
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.List;
public static void main(String[] args) {
RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
List<String> jvmArgs = bean.getInputArguments();
for (int i = 0; i < jvmArgs.size(); i++) {
System.out.println( jvmArgs.get( i ) );
}
System.out.println(" -classpath " + System.getProperty("java.class.path"));
// print the non-JVM command line arguments
// print name of the main class with its arguments, like org.ClassName param1 param2
System.out.println(" " + System.getProperty("sun.java.command"));
}用于getInputArguments的javadoc
返回传递给Java虚拟机的输入参数,该虚拟机不包括主方法的参数。如果Java虚拟机没有输入参数,此方法将返回一个空列表。 一些Java虚拟机实现可能从多个不同的来源获取输入参数:例如,从启动Java虚拟机的应用程序中传递的参数,例如'java‘命令、环境变量、配置文件等。 通常,并不是所有的命令行选项都被传递给Java虚拟机。因此,返回的输入参数可能不包括所有命令行选项。
您还可以查看:jps
它是一个Java程序,能够获得所有Java进程的完整命令行,包括主类和JVM选项的完整类名。
您可以找到各种JVM工具的很好的摘要,包括指向以下方面的Java应用程序启动程序链接:
getInputArguments() javadoc发布于 2012-12-19 18:03:33
可以使用这检索VM参数:
public static void main(String args[]) {
List<String> inputArguments = ManagementFactory.getRuntimeMXBean().getInputArguments();
System.out.println("input arguments = " + inputArguments);
}但是,它不会为您提供所有的命令行(只提供JVM参数,不提供主类或参数)。样本输出:
输入参数=-Dfile.code=UTF-8,-XX:-UseTLAB,-Xms2000m,-Xmx2000m,-XX:+PrintCompilation,-XX:+PrintGC
发布于 2012-12-28 11:52:20
在linux机器中运行将更容易:
ps -ef | grep java此命令将列出使用其使用的参数运行的所有java程序。
不确定在windows环境中可以使用什么。
https://stackoverflow.com/questions/13958318
复制相似问题