2016-04-05 12 views
2

Ich have ein benutzerdefiniertes Plugin namens MyPlugin und es enthält eine benutzerdefinierte Aufgabe namens MyTask. Ich möchte MyTask dependsOn compileJava machen. Ich habe versucht, MyTask.dependsOn(compileJava) zu geben, aber es sagt Task called 'MyTask' is not existing. Gibt es einen Weg, es zu tun?Gradle benutzerdefinierte Plugin hängt von der Systemaufgabe

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 
+0

Könnten Sie 'build.gradle' Datei hinzufügen, wo Sie das Plugin anwenden und konfigurieren Sie die Aufgabe? – Michael

Antwort

-1

Soweit ich Ihre Aufgabe genannt myTask zu sehen ist, nicht MyTask. Es war ein Tippfehler im Code des Autors.

UPDATE:

Sie gelten nicht dein Plugin, so dass die Aufgabe nicht erstellt wird, erhalten. Und Sie können kein Plugin von einem Plugin build.gradle anwenden. Zumindest können Sie keine Version des zu erstellenden Plugins anwenden. Das Beste, was Sie tun können, ist, eine zuvor erstellte Version des Plugins anzuwenden, die in einem Maven Repo gespeichert ist. Aber es sieht nicht nach einer guten Idee aus.

+0

Nein. Das war eigentlich ein Tippfehler. Mein Aufgabenname in MyTask – Msp

+0

Sie werden es in Ihrer Frage beheben? – Michael

+0

Ich habe die Änderungen vorgenommen – Msp

0

Wenn Sie das Grapple-Plug-in auf ein anderes Gradle-Projekt anwenden, z. B. projectA, fügt Ihr Plug-in ProjektA eine Aufgabe namens MyTask hinzu. Die build.gradle, die Sie oben gepostet haben, ist für das Plugin-Projekt und hat keine Aufgabe namens MyTask.

0

Sie haben

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

zu verwenden, da die Aufgabe Objekt, das Sie nicht in dem aktuellen Bereich wie copyLibs definiert ist. Aber Sie können darauf zugreifen über die Aufgaben Referenz (siehe: https://docs.gradle.org/current/dsl/org.gradle.api.Project.html)

Verwandte Themen