gradle - 我如何知道 gradle 任务是否已定义输入和输出?

标签 gradle

我在文档中找不到任务的输入和输出的任何提示。例如,我想知道是否可以跳过测试任务以及何时跳过。

最佳答案

我没有找到使用gradlew的内置功能来做到这一点的方法。命令,但如果您愿意向 build.gradle 添加一些代码,则可以使用 Gradle 运行时 API文件。您可以添加用于获取任务并将其输入和输出打印到 gradle.projectsEvaluated 的逻辑。 block ,或在您专门为此目的运行的任务中。

例如,此代码(在 Groovy build.gradle 文件中)定义了一个任务 printInputsAndOutputs这将打印 compileJava 的输入和输出任务:

tasks.register("printInputsAndOutputs") {
    doLast {
        Task task = tasks.getByPath(":app:compileJava")

        TaskInputs inputs = task.inputs
        println("compileJava has inputs? ${inputs.hasInputs}")
        println("compileJava input files: ${inputs.files.asPath}")
        println("compileJava hasSourceFiles? ${inputs.hasSourceFiles}")
        println("compileJava input source files: ${inputs.sourceFiles.asPath}")
        println()

        TaskOutputs outputs = task.outputs
        println("compileJava has output? ${outputs.hasOutput}")
        println("compileJava output files: ${outputs.files.asPath}")
    }
}

这是我在新的 gradle init 本地运行此命令时看到的输出编辑项目:

$ ./gradlew printInputs

> Task :app:printInputsAndOutputs
compileJava has inputs? true
compileJava input files: /home/mark/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-text/1.9/ba6ac8c2807490944a0a27f6f8e68fb5ed2e80e2/commons-text-1.9.jar:/home/mark/demo/utilities/build/classes/java/main:/home/mark/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.11/68e9a6adf7cf8eb7e9d31bbc554c7c75eeaac568/commons-lang3-3.11.jar:/home/mark/demo/list/build/classes/java/main:/home/mark/demo/app/src/main/java/demo/app/MessageUtils.java:/home/mark/demo/app/src/main/java/demo/app/App.java
compileJava hasSourceFiles? true
compileJava input source files: /home/mark/demo/app/src/main/java/demo/app/MessageUtils.java:/home/mark/demo/app/src/main/java/demo/app/App.java

compileJava has output? true
compileJava output files: /home/mark/demo/app/build/classes/java/main:/home/mark/demo/app/build/generated/sources/annotationProcessor/java/main:/home/mark/demo/app/build/generated/sources/headers/java/main:/home/mark/demo/app/build/tmp/compileJava/previous-compilation-data.bin

BUILD SUCCESSFUL in 351ms
10 actionable tasks: 1 executed, 9 up-to-date

当然,根据您认为合适的情况进行调整以获得不同的任务、略有不同的信息,或者可能通过 -P 获取任务名称如果您想要一个永久的、可重用的任务来进行这种内省(introspection),请使用参数。

关于gradle - 我如何知道 gradle 任务是否已定义输入和输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69858584/

相关文章:

java - Gradle依赖解析

spring-boot - Gerrit-错误:在文件Gradle/wrapper/gradle-wrapper.jar中找到回车符(CR)

gradle - 获取库中的根项目名称

java - Android Studio Gradle 找不到 'com.android.support:design:22.2.0'(Android 设计支持库)

android - 在如下所示的 gradle 中,我可以在发布应用程序之前从代码 testImplementation 'junit:junit:4.12' 中删除吗?

android - 获取 MultiDex 错误,即使在设置 Min SDK 21 之后

android-studio - 错误 : Failed to resolve: com. badlogicgames.gdx :gdx-backend-lwjgl:1. 6.5

gradle - Gradle 的 build.gradle 中的 '' 和 ""有什么区别?

android - Gradle JacocoTestReports 任务在 bamboo 构建服务器上被跳过,但在本地机器上构建良好

gradle - Kotlin DSL 中的 gradle 额外属性是如何设置的?