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