当前位置: 首页 > 知识库问答 >
问题:

从任务内调用任务

归明诚
2023-03-14

我正在将一些用于iOS和OSX的Ant构建转换为Gradle。创建了以下内容:

class XcodeBuildTask extends DefaultTask {


    @TaskAction
    def build() {

        def moduleName = 'Typhoon' as String

        def commandLine = """
        #!/bin/sh
        xcodebuild -workspace ${moduleName}.xcworkspace test -scheme Typhoon-iOS -configuration Debug | xcpretty -c -t junit
        """

        def xcodeBuildOutput = new ByteArrayOutputStream();
        def consoleInput = new ByteArrayInputStream()

        exec {
            executable 'bash'
            standardInput = new ByteArrayInputStream(commandLine.getBytes());
            standardOutput = xcodeBuildOutput
        }

    }
}

这可能很简单,但我做错了什么?如何从自定义类中调用exec任务?

共有1个答案

王扬
2023-03-14

这里要做的是从任务中调用project#exec方法。(无法调用任务。)与构建脚本不同,类没有隐式项目上下文。因此,它必须是project.exec而不是exec

考虑另一种方法,例如以下方法:

@TaskAction
def build() {

    Process proc = 'bash'.execute();

    def writer = new PrintWriter(new BufferedOutputStream(proc.out));
    writer.print(xcBashScript());
    writer.close();

    proc.consumeProcessOutput(System.out, System.err);
    proc.waitFor();
    proc.exitValue()


}

private String xcBashScript() {
    $/
    #!/bin/sh
    xcodebuild -workspace ${workspace}.xcworkspace test -scheme ${schemeName} -configuration Debug \
    CONFIGURATION_TEMP_DIR='${intermediatesDir}' -destination OS=${sdkVersion},name=iPad | xcpretty \
    /$
}
 类似资料:
  • 我在用Gradle。我有两个任务:“A”和“B”。我想让任务“A”调用任务“B”。我怎么能这么做? 是否可以简单地从现有任务中调用另一个任务?

  • 我有代码: 年级4.5.1对此警告为 但是link没有给我任何可以替换它的提示,因为我不能仅仅设置任务依赖项,比如dependsOn或FinalizdBy--它不是从其他任务调用的,而是从构建的末尾调用的。

  • 简介 在过去,开发者必须在服务器上为每个任务生成单独的 Cron 项目。而令人头疼的是任务调度不受源代码控制,而且必须通过 SSH 连接到服务器上来增加 Cron 项目。 Laravel 的命令调度程序允许你在 Laravel 中对命令调度进行清晰流畅的定义。并且在使用调度程序时,只需要在服务器上增加一条 Cron 项目即可。调度是在 app/Console/Kernel.php 文件的 sche

  • 基本任务调度 方案1: 通过 @Cron 注解,这个需要依赖 cron4j 框架: //1分钟执行一次 @Cron("*/1 * * * *") public class MyTask implements Runnable { @Override public void run() { System.out.println("task running...");

  • 我想调用一个方法,从一个AsyncWork,从另一个类,我正在尝试这个 但我得到错误“。你能帮助我吗? 我的扩展活动:

  • 我想在父build.gradle文件中创建一个任务,该任务按这个特定顺序从子项目调用任务。这是我在build.gradle文件中的任务定义,每个子项目的任务都已定义并开始工作。我可以从命令行调用每个单独的任务。我希望能够从命令行调用这个父任务,并且它按照定义的顺序执行所有子项目任务。 无法获取org.gradle.api.project类型的项目“:LoadRemote”的未知属性“Remote