2016-06-24 14 views
0

Ich habe ein Gradle-Plugin erstellt, das den gewünschten Java-Code generiert.Fügen Sie einen zweiten Quellordner auf einem Gradle-Projekt hinzu, das mein Gradle-Plugin verwendet

Ich habe mein Plugin auf ein Testprojekt getestet und es hat einwandfrei funktioniert, die Dateien wurden korrekt generiert.

Jetzt muss ich mein Plugin für das Projekt bewerben arbeite ich an, dies zu tun Ich habe die folgenden Zeilen in dem build.gradle des Projekts:

buildscript { repositories { [...] mavenLocal() <-- } dependencies { [...] classpath 'my.plugin.path:app:1.0' <-- the maven local path of my plugin } } apply plugin: 'myPlugin' <--

Dann werden die Dateien, die mein Plugin erzeugt werden in den Ordner src platziert. In diesem Fall wird das Projekt korrekt erstellt.

ABER, möchte ich die generierten Dateien in den Ordner target legen.

versuchte ich zwei Möglichkeiten, es zu lösen:

  1. € Hinzufügen sourceSets in den build.gradle wie Block:

sourceSets { main { java { srcDirs = ['src/main/java', 'target/java'] } } }

Und wenn ich zu gradle build versuchen, die :compileDebugJavaWithJavac Aufgabe scheitern, weil ein Code in dem Ordner src/main/java den Code benötigt, den ich generiere. Der Code im Zielordner scheint jedoch nicht kompiliert zu sein.

  1. die Quellordner durch die Code-Plug-In ist

Hier meine Plugin-Klasse (in Groovy):

import com.android.build.gradle.AppPlugin 
import org.gradle.api.Plugin 
import org.gradle.api.Project 
import org.gradle.api.Task 

class MyPlugin implements Plugin<Project> { 
    @Override 
    void apply(Project project) { 
     def hasAppPlugin = project.plugins.hasPlugin AppPlugin 

     project.afterEvaluate({ 
      def variants = hasAppPlugin ? project.android.applicationVariants : project.android.libraryVariants 
      variants.all { variant -> 
       def compileJavaTask = variant.javaCompile 

       [...] // Adds tasks to the plugins 

       compileJavaTask.source = project.files("${project.rootDir}/target/java", output) 

       compileJavaTask.dependsOn javaTask 
      } 
     }) 
    } 
} 

Die zwei letzten Zeilen sein sollten Genug, aber ich habe das gleiche Problem als in Fall 1.

Ich habe eigentlich keine Ahnung, warum das nicht funktioniert, hat jemand eine Idee?

+0

ich keine Antworten in dieser Woche Ende testen konnte, ist dies für die Arbeit, aber ich werde ein Auge auf Ihre Antworten halten –

Antwort

0

+= statt = auf der Linie:

compileJavaTask.source += project.files("${project.rootDir}/target/java", output)