繁体   English   中英

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

[英]Gradle custom plugin depends on system task

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

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);
    }
}

MyTask.java

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());
    }

MyExtension.java

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

你必须使用

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

因为您定义的任务对象不在当前范围内,如copyLibs。 但您可以通过任务参考访问它(请参阅: https//docs.gradle.org/current/dsl/org.gradle.api.Project.html

如果您将gradle插件应用于其他gradle项目,例如projectA,则您的插件会向projectA添加一个名为MyTask的任务。 您在上面发布的build.gradle是针对插件项目的,并且没有名为MyTask的任务。

据我myTask ,你的任务被称为myTask ,而不是MyTask 这是作者代码中的一个错字。

更新

您不应用您的插件,因此不会创建任务。 而且你不能从插件的build.gradle应用插件。 至少你不能应用正在构建的插件的版本。 您可以做的最好的事情是应用以前构建的插件版本,该插件存储在Maven仓库中。 但它看起来不是一个好主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM