Java执行shell命令

/ JDK / 没有评论 / 40浏览

Java库自带的Runtime包可以调用命令,但是不好用,我们利用Apachet提供的工具包commons-exec来优雅的调用命令。

依赖

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-exec</artifactId>
    <version>1.3</version>
</dependency>

代码

public class CmdUtil {

    public static void execute(String command, int exitValue, long timeout) throws IOException {
        final CommandLine cmdLine = CommandLine.parse(command);
        final DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();

        // 设置超时时间:60秒
        ExecuteWatchdog watchdog = new ExecuteWatchdog(timeout);

        DefaultExecutor executor = new DefaultExecutor();
        executor.execute(cmdLine, resultHandler);
        // default退出值
        executor.setExitValue(exitValue);
        // Watchdog
        executor.setWatchdog(watchdog);
    }

    @Test
    public void run() throws IOException {
        String command = "D:\\developer\\data-integration\\Kitchen.bat /file D:\\work\\中国移动\\项目文档wc\\04系统开发\\04.代码管理\\01报表平台\\01GL\\01STG\\ETL\\job_XLA_BALANCE_CAL.kjb /genImage true";
        execute(command, 0, 60 * 1000);
    }

}

它的优点是可以设置超时,默认退出值。