我在 Groovy 下编写了一个 Gradle 插件buildSrc
as:
package test
import org.gradle.api.Plugin
import org.gradle.api.Project
class SamplePlugin implements Plugin<Project> {
@Override
void apply(Project project) {
println "This line prints" //Just for Configuration. This prints
def sample = project.tasks.create("sample") {
doLast {
println "This line does not print"
}
}
project.configure(project) {
sample.mustRunAfter('check')
}
}
}
在这里,我正在尝试运行sample
我的任务结束时build
,所以我让它运行check
我现在尝试在我的项目中调用它build.gradle
文件看起来像:
buildscript {
repositories {
mavenLocal()
mavenCentral()
}
}
apply plugin: 'java'
apply plugin:'application'
apply plugin: test.SamplePlugin
repositories {
mavenLocal()
mavenCentral()
}
mainClassName = "test.Widget"
不幸的是,我没有看到它运行,即中的代码doLast
不会出现在输出中,但配置代码会出现:
:buildSrc:compileJava NO-SOURCE
:buildSrc:compileGroovy
:buildSrc:processResources UP-TO-DATE
:buildSrc:classes
:buildSrc:jar
:buildSrc:assemble
:buildSrc:compileTestJava NO-SOURCE
:buildSrc:compileTestGroovy NO-SOURCE
:buildSrc:processTestResources NO-SOURCE
:buildSrc:testClasses UP-TO-DATE
:buildSrc:test NO-SOURCE
:buildSrc:check UP-TO-DATE
:buildSrc:build
This line prints
:compileJava UP-TO-DATE
:processResources NO-SOURCE
:classes UP-TO-DATE
:jar UP-TO-DATE
:startScripts UP-TO-DATE
:distTar UP-TO-DATE
:distZip UP-TO-DATE
:assemble UP-TO-DATE
:compileTestJava NO-SOURCE
:processTestResources NO-SOURCE
:testClasses UP-TO-DATE
:test NO-SOURCE
:check UP-TO-DATE
:build UP-TO-DATE
BUILD SUCCESSFUL in 1s
5 actionable tasks: 5 up-to-date
如果有任何帮助或指点,我将不胜感激
Edit: As 里丘蒂下面评论了订单事宜,所以我移动了test.SamplePlugin
插件之后java
。否则请关注卢科尔弗使用的解决方案pluginManager
.
在您的插件中,您正在创建一个新任务“样本”并设置约束“样本必须在检查后运行”:但这不包括任务图中的样本任务。它只是说:“如果样本和检查任务都执行,则必须先执行检查任务”。因此,如果您只执行“gradle build”,这不会触发任务“sample”的执行。
尝试直接执行“gradle example”:您将看到它将触发其执行,并根据您在插件中定义的约束首先执行“check”任务。
如果您想让“sample”任务在每次执行“build”任务时执行,那么只需在插件中的“build”和“sample”任务之间设置“dependsOn”约束:
class SamplePlugin implements Plugin<Project> {
@Override
void apply(Project project) {
println "This line prints" //Just for Configuration. This prints
def sample = project.tasks.create("sample") {
doLast {
println "This line does not print"
}
}
project.configure(project) {
sample.mustRunAfter('check')
project.getTasks().findByName('build').dependsOn(sample) // <== set this contraint
}
}
}
EDIT:为了避免依赖插件应用顺序,任务依赖声明可以包装在“afterEvaluate”块中:
void apply(Project project) {
// task 'sample' def ...
// ...
project.configure(project) {
project.afterEvaluate {
sample.mustRunAfter('check')
project.getTasks().findByName('build').dependsOn(sample)
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)