【问题标题】:Gradle Tasks depends on a file which should not exist yetGradle 任务依赖于一个不应该存在的文件
【发布时间】:2023-04-03 07:20:01
【问题描述】:

我想要一个 Gradle Tasks 来执行我新构建的 Java 应用程序。它还应该将 log/sout 输出到一个名为 servicedispatcher.out 的文件中。发生的问题是Gradle,即使我让这个任务依赖于copyDistributionsToDestination(这会创建错误抱怨的丢失文件路径),它仍然会在任务依赖之前评估任务代码。这样我就没有机会将此路径定义为日志输出路径。我能做些什么来解决这个问题?

给定以下代码:

task startDispatcher(type:Exec){
    workingDir = "servicedispatcher/bin/"
    commandLine "cmd", "/c", "servicedispatcher.bat"
    File logFile = file("${workingDir}/log/toolbox-components-servicedispatcher.out")
    if(logFile.exists() == false){
        logFile.createNewFile() // Line 75 of error message
    }
    standardOutput = new FileOutputStream("${workingDir}/log/servicedispatcher.out")
}

task startToolbox(){
    group "Toolbox"
    dependsOn copyDistributionsToDestination
    dependsOn startDispatcher
}

startDispatcher.mustRunAfter("copyDistributionsToDestination")

错误信息:

FAILURE: Build failed with an exception.

* Where:
Build file 'C:\Development\Testzone\toolbox-backend\build.gradle' line: 75

* What went wrong:
A problem occurred evaluating root project 'toolbox-backend'.
> Das System kann den angegebenen Pfad nicht finden

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 3.32 secs
Das System kann den angegebenen Pfad nicht finden
19:19:48: External task execution finished ':startToolbox'.

【问题讨论】:

    标签: java gradle task


    【解决方案1】:

    也许在执行阶段创建文件?喜欢

    doFirst {
        if(!logFile.exists()) {
            logFile.createNewFile()
        }
    }
    

    如果任务没有运行,它也不会被创建。使用您当前的代码,在配置阶段执行此操作,如果您启动 Gradle,无论任务是否运行,都会始终创建此文件。

    【讨论】:

    • 问题是我的日志文件是在 Exec 类型的 workingDir 属性定义的相对路径中创建的。尝试将其带到 doFirst 函数将不起作用,因为 doFirst 没有“Exec”类型的功能。使用绝对路径不是解决方案。 buildDir 属性也无济于事,因为我已经将文件复制到名为 production 的文件夹中以进行部署试用
    • 为什么不能在执行时使用任务的工作目录属性?当然可以。即使没有,也没有什么可以阻止您在配置时定义 logFile 变量。正如您在我的示例中看到的那样,我没有将该行放在执行阶段。当然,这是有道理的。无需在执行阶段进行该调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    相关资源
    最近更新 更多