java代码调用Gradle命令


    /**
     * 执行任务
     *
     * @param rootProjectDir 根项目所在目录。
     * @param subProjectName 子工程名称,如果子项目名称为空,则表示在整个工程中执行任务
     * @param tasks 任务
     * @return 执行结果
     */
    public ExecuteResult execute(String rootProjectDir, String subProjectName, String... tasks) {
        if (StringUtil.isBlank(rootProjectDir)) {
            throw new IllegalArgumentException("根项目所在的目录不能为空!");
        }
        final File root = new File(rootProjectDir);
        if (!root.exists()) {
            throw new IllegalArgumentException("根项目所在的目录不存在!");
        }
        if (tasks == null) {
            throw new IllegalArgumentException("没有可执行的任务!");
        }
        final List<String> arguments = new ArrayList<String>(1);
        arguments.add("-xTest");
        final Map<String, String> jvmDefines = new HashMap<String, String>();
        final String[] taskes = tasks;
        if (StringUtil.isNotBlank(subProjectName)) {
            String sub = this.findSubProject(root, subProjectName);
            if (StringUtil.isNotBlank(sub)) {
                for (int i = 0; i < taskes.length; i++) {
                    taskes[i] = sub + ":" + tasks[i];
                }
            }
        }
        ExecutorService service = Executors.newSingleThreadExecutor();
        Future<ExecuteResult> future = service.submit(new Callable<ExecuteResult>() {
            
            @Override
            public ExecuteResult call() throws Exception {
                return execute(root, arguments, jvmDefines, taskes);
            }
            
        });
        try {
            while (!future.isDone()) {
                // 等待结果
            }
            LOGGER.info("{}::执行【{}】完成。", rootProjectDir, Arrays.toString(tasks));
            return future.get();
        } catch (Exception e) {
            LOGGER.error("任务执行失败。", e);
            return new ExecuteResult(Result.FAIL, e);
        } finally {
            service.shutdown();
        }
    }
    
    /**
     * 执行Gradle命令
     *
     * @param projectDir 项目目录
     * @param arguments 执行参数
     * @param jvmDefines jvm参数
     * @param tasks 任务
     * @return 执行结果
     */
    public ExecuteResult execute(File projectDir, List<String> arguments, Map<String, String> jvmDefines, String... tasks) {
        ProjectConnection connection = gradleConnector.forProjectDirectory(projectDir).connect();
        final CountDownLatch latch = new CountDownLatch(1);
        final ExecuteResult ret = new ExecuteResult();
        try {
            BuildLauncher build = connection.newBuild().forTasks(tasks).withArguments(arguments.toArray(new String[arguments.size()]));
            String[] jvmArgs = new String[jvmDefines.size()];
            if (!jvmDefines.isEmpty()) {
                int index = 0;
                for (Map.Entry<String, String> entry : jvmDefines.entrySet()) {
                    jvmArgs[index++] = "-D" + entry.getKey() + "=" + entry.getValue();
                }
            }
            build.setJvmArguments(jvmArgs);
            build.addProgressListener(new ProgressListener() {
                
                @Override
                public void statusChanged(ProgressEvent event) {
                    LOGGER.info("execute gradle task status changed:" + event.getDescription());
                }
            });
            build.run(new ResultHandler<Void>() {
                
                @Override
                public void onComplete(Void result) {
                    ret.setResult(Result.SUCCESS);
                    latch.countDown();
                }
                
                @Override
                public void onFailure(GradleConnectionException exception) {
                    ret.setResult(Result.FAIL);
                    ret.setException(exception);
                    latch.countDown();
                }
            });
            latch.await();
        } catch (InterruptedException e) {
            LOGGER.error("执行Gradle命令出错:" + e.getMessage(), e);
        } finally {
            connection.close();
        }
        return ret;
    }

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值