繁体   English   中英

Java,使用Runtime.exec()继承类路径

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM