天天看點

Runtime.exec的坑

       JAVA使用Apache Commons Exec執行程式的時候,用了executor.execute(cmdLine, envMap)方法,envMap裡設定了環境變量,之前調用mysqldump的時候是沒有問題的,但是今天調用expdp的,就報出了找不到.so的錯誤。

       查了好半天,才弄明白,executor.execute(cmdLine, envMap)會調用JAVA自帶的Runtime.exec(String[] cmdarray, String[] envp, File dir),在envp給了環境變量的時候,會先設定對應的環境變量,但是系統的環境變量被清空了,連PATH都沒有值。

       這個太坑了,最後隻能拼接指令變成 "export aaa=xxxx  && mycmd myparameters"來執行了。