Java Gradle自定义插件取决于系统任务

Java Gradle自定义插件取决于系统任务,java,gradle,gradle-plugin,Java,Gradle,Gradle Plugin,我有一个名为MyPlugin的自定义插件,它包含一个名为MyTask的自定义任务。我想让MyTaskdependsOncompileJava。我试图给MyTask.dependsOn(compileJava),但它说名为“MyTask”的任务不存在。有什么办法吗 MyPlugin.java public class MyPlugin implements Plugin<Project> { public static final String TASK_NAME = "MyT

我有一个名为
MyPlugin
的自定义插件,它包含一个名为
MyTask
的自定义任务。我想让
MyTask
dependsOn
compileJava
。我试图给
MyTask.dependsOn(compileJava)
,但它说名为“MyTask”的
任务不存在。有什么办法吗

MyPlugin.java

public class MyPlugin implements Plugin<Project> {
    public static final String TASK_NAME = "MyTask";

    @Override
    public void apply(Project project) {
        project.getExtensions().create(TASK_NAME, MyExtension.class);
        project.getTasks().create(TASK_NAME, MyTask.class);
    }
}
public class MyTask extends DefaultTask {
    private MyExtension extension;

    @TaskAction
    public void myTask() {
        Project project = getProject();
        extension = project.getExtensions().findByType(MyExtension.class);
        PropertyManager propertyManager = new PropertyManager(project, extension);
        propertyManager.setProperties();
        System.out.println(extension.getValue());
    }
public class MyExtension {
    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
MyExtension.java

public class MyPlugin implements Plugin<Project> {
    public static final String TASK_NAME = "MyTask";

    @Override
    public void apply(Project project) {
        project.getExtensions().create(TASK_NAME, MyExtension.class);
        project.getTasks().create(TASK_NAME, MyTask.class);
    }
}
public class MyTask extends DefaultTask {
    private MyExtension extension;

    @TaskAction
    public void myTask() {
        Project project = getProject();
        extension = project.getExtensions().findByType(MyExtension.class);
        PropertyManager propertyManager = new PropertyManager(project, extension);
        propertyManager.setProperties();
        System.out.println(extension.getValue());
    }
public class MyExtension {
    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
build.gradle

apply plugin: 'maven'
apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: 'com.jfrog.bintray'

sourceCompatibility = 1.8

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
    compile gradleApi()
}

repositories {
    mavenCentral()
}

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
    }
}

task copyLibs(type: Copy) {
    from configurations.runtime
    into "$projectDir/libs"
}

MyTask.dependsOn(copyLibs)  //not working
MyTask.dependsOn(compileJava)   //not working
据我所知,您的任务名为
myTask
,而不是
myTask
。 这是作者代码中的一个输入错误

更新


您没有应用插件,因此无法创建任务。您不能从插件的
build.gradle
应用插件。至少您不能应用正在生成的插件的版本。您所能做的最好的事情就是应用存储在Maven repo中的先前构建的插件版本。但是这看起来不是个好主意。

如果你的gradle插件被应用到不同的gradle项目,比如projectA,你的插件会在projectA中添加一个名为MyTask的任务。您上面发布的build.gradle用于插件项目,没有名为MyTask的任务。

您必须使用

tasks.MyTask.dependsOn(copyLibs) 
tasks.MyTask.dependsOn(compileJava)

因为您定义的任务对象与copyLibs不在当前范围内。但您可以通过任务参考(请参阅:)访问它。

No。那实际上是个打字错误。我在MyTask中的任务名称你打算在你的问题中修复它吗?我已经做了更改,并在答案中添加了一个假设。这是插件项目的build.gradle。你能添加
build.gradle
文件在其中应用插件并配置任务吗?