簡體   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