[英]Java, inherit classpath with Runtime.exec()
我有一个可以创建子进程的程序,并且我希望它从其父级继承所有类路径。 在javadoc中,它说:
公共进程exec(String [] cmdarray,String [] envp)抛出IOException
在具有指定环境的单独进程中执行指定的命令和参数。
给定一个表示命令行标记的字符串数组cmdarray和一个表示“ environment”变量设置的字符串envp数组,此方法将创建一个新进程来执行指定的命令。
如果envp为null,则子进程继承当前进程的环境设置。
当我将envp设置为null时,它没有继承任何东西。
这是代码:
System.out.print("Debug system path: "+System.getProperty("java.class.path"));
startTime();
Process proc = Runtime.getRuntime().exec(cmd,null);
我可以看到路径信息,但是新创建的过程不会继承这些路径信息。
您如何指定应用程序的类路径? 如果不是通过CLASSPATH环境变量,则不会被继承。
Runtime.exec方法可以调用任何本机应用程序,此处的envp是指系统环境,而不是Java环境。
如果要将类路径传递给子java进程,则可以明确地这样做:
String[] cmdarray = new String[] {
"java", "-classpath", System.getProperty("java.class.path"), "com.example.MyChildApp", "appParam"};
Process p = Runtime.getRuntime().exec(cmdarray);
没办法 调用exec时的“ classpath”就是调用它时隐藏在当前类加载器中的任何东西。 通常,您不能要求类加载器告诉您类路径。 可能是从数据库或火星上获取类。
阅读java.class.path会告诉您应用程序启动时正在发生什么,但不会告诉您启动其他事件时正在发生的情况。
最后,我必须在cmd中插入“ -cp System.getProperty(“ java.class.path”)”才能使其正常工作。
有什么更好的方法吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.