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

在doFirst中commandLine之后跳过了Gradle任务执行

翟俊哲
2023-03-14

这是Windows上的构建过程。我有一个gradle任务(类型:Exec),它使用它的doFirst闭包从外部目录临时复制文件,这是它的构建过程所必需的:

task(myTask, type: Exec) {
    [...]
    < do own stuff >
    [...]

    doFirst {
        println "Copy file"
        if (System.properties['os.name'].toLowerCase().contains('windows')) {
            commandLine 'cmd', '/c', "copy .\\<myFile> .\\..\\.."
        }
    }
}

出于某种原因,使用doFirst中的commandLine来执行复制命令会使整个任务终止,并阻止执行任务的主要目的。

[DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTING
[DEBUG] [org.gradle.process.internal.DefaultExecHandle] Waiting until process started: command 'cmd'.
[DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTED
[DEBUG] [org.gradle.process.internal.ExecHandleRunner] waiting until streams are handled...
[INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command 'cmd''
[QUIET] [system.out]         1 file(s) copied.
[DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: SUCCEEDED
[DEBUG] [org.gradle.process.internal.DefaultExecHandle] Process 'command 'cmd'' finished with exit value 0 (state: SUCCEEDED)
[DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task 'myTask'

共有1个答案

徐学潞
2023-03-14

不要使用doFirst闭包中的commandline,而是使用简单的旧copy块:

task(myTask, type: Exec) {
    [...]
    < do own stuff >
    [...]

    doFirst {
        println "Copy file"
        copy {
           from "some file"
           into "some path"
        }
    }
}
 类似资料:
  • 我正在使用gradle构建我的项目,使用以下build.gradle文件: 当我输入gradle build命令时,我希望gradle在生成后执行一个任务。 我在网上找到了一个,我尝试了多种方法都失败了。 如果你知道怎么做,请告诉我。

  • 我是格拉德尔的新信徒。大多数任务都很好。然而,我看到战争任务总是被跳过。在调试模式下运行时,我会看到以下日志- 09:12:34.889[LIFECYCLE][类org.gradle.internal.buildevents.TaskExuretionLogger]: war09:12:34.889[DEBUG][org.gradle.api.internal.tasks.execution.Ex

  • 我试图在一个Android Studio项目中为一个lib模块'lib1'执行一个gradle任务。它应该使用命令'Gradlew AssembleDebug'或'Gradlew Assemble'运行,但它从未运行。 我尝试了一个更简单的任务,没有依赖性,它似乎也从来没有运行过。

  • 我希望在编译任何子项目之前先执行protobuf任务,因为我的子项目依赖于从protobuf任务生成的java文件。那么我怎样才能做到这一点呢?我不想在每个子项目中都有protobuf任务,相反,我只想在根项目中同时完成它,但在编译子项目之前。

  • 我正在从事一个spring boot项目,以自动化与gradle的集成测试。我最近开始在一家新企业工作,我的同事们按如下方式运行集成测试:在构建中。gradle文件有一个集成测试任务 启动任务后,应用程序开始在指定端口运行,然后打开postman,导入集合并运行测试。 我的工作是找到一种方法来跳过额外的点击,即自动运行邮递员集合。第一个想法是使用postman-run gradle插件,但由于企业

  • 我面临的错误是无法将java.lang.Integer类转换为java.lang.String类。运行gradle测试时-Pnum=10。这是我的代码: