Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在gradle中完成任务后添加消息或下一行_Java_Ant_Groovy_Gradle_Task - Fatal编程技术网

Java 在gradle中完成任务后添加消息或下一行

Java 在gradle中完成任务后添加消息或下一行,java,ant,groovy,gradle,task,Java,Ant,Groovy,Gradle,Task,我有一个包含子项目projA和projB的项目 如何在执行根项目中的任何任务后添加新行? 我尝试的是: 我编写了一个任务来打印commonClosures.gradle文件中的下一行,并将其包含在模块gradle文件中(apply from:)。我面临的问题是,当从根项目运行时,任务会运行多次 目录结构: testPro/ ├── build.gradle ├── gradle │   ├── commonClosures.gradle │   └── wrapper.. ├── gradlew

我有一个包含子项目projA和projB的项目

如何在执行根项目中的任何任务后添加新行? 我尝试的是:

我编写了一个任务来打印commonClosures.gradle文件中的下一行,并将其包含在模块gradle文件中(apply from:)。我面临的问题是,当从根项目运行时,任务会运行多次

目录结构:

testPro/
├── build.gradle
├── gradle
│   ├── commonClosures.gradle
│   └── wrapper..
├── gradlew
├── projA
│   ├── build.gradle
│   ├── gradle
│   │   └── wrapper..
│   ├── gradlew
│   └── settings.gradle
├── projB
│   ├── build.gradle
│   ├── gradle
│   │   └── wrapper..
│   ├── gradlew
└── settings.gradle
cat设置。渐变

rootProject.name = 'testPro'
include 'projA','projB'
apply plugin: 'java'
apply from: '../gradle/commonClosures.gradle'
apply plugin: 'java'
apply from: '../gradle/commonClosures.gradle'
gradle.taskGraph.afterTask { 
    println "task completed"
}
cat build.gradle

apply plugin: 'java'
apply from: 'gradle/commonClosures.gradle'
cat projA/build.gradle

rootProject.name = 'testPro'
include 'projA','projB'
apply plugin: 'java'
apply from: '../gradle/commonClosures.gradle'
apply plugin: 'java'
apply from: '../gradle/commonClosures.gradle'
gradle.taskGraph.afterTask { 
    println "task completed"
}
cat项目/build.gradle

rootProject.name = 'testPro'
include 'projA','projB'
apply plugin: 'java'
apply from: '../gradle/commonClosures.gradle'
apply plugin: 'java'
apply from: '../gradle/commonClosures.gradle'
gradle.taskGraph.afterTask { 
    println "task completed"
}
cat gradle/CommonCloses.gradle

rootProject.name = 'testPro'
include 'projA','projB'
apply plugin: 'java'
apply from: '../gradle/commonClosures.gradle'
apply plugin: 'java'
apply from: '../gradle/commonClosures.gradle'
gradle.taskGraph.afterTask { 
    println "task completed"
}
输出:

~/workspace/ROOT_PROJECT

]$ ./gradlew clean
projA
:clean UP-TO-DATE
task completed
task completed
task completed
:projA:clean UP-TO-DATE
task completed
task completed
task completed
:projB:clean UP-TO-DATE
task completed
task completed
task completed

BUILD SUCCESSFUL
有什么简单的方法来处理这个问题吗?

就像在
后任务中一样,将在添加到图表中的每个任务之后执行
。这可以通过以下行动来实现:

project.tasks.clean.doLast {
    println '\n'
}
你想达到什么目标

它运行良好:

gradle.taskGraph.afterTask {
   println "lol" 
}

task lol
[opal@opal-mac]/tmp%gradle lol
:lol最新 哈哈

建设成功

总时间:2.866秒

编辑


这很容易解释。由于将
commonClosures
应用于所有
build.gradle
脚本,因此实际上应用了三次。所以闭包执行了三次。这种闭包应该只应用于
rootProject
build.gradle
。看一看。

你到底在执行任务吗?哦,很抱歉把我搞糊涂了。我是说所有的任务。不仅仅是为了清洁工作。它应该为所有任务提供下一行。是的,当我从子项目的“内部”执行它时,它会起作用。当我从中运行任务时,我希望这样rootProject@smilyface,您能提供一个重现问题的SSCCE吗?它可能位于GH上,例如添加了SSCCE。请检查。谢谢您的更新。它只在我从根项目运行任务时起作用。当试图从模块内部运行时(比如projA),它不会打印消息。