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:
- € 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.
- 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?
ich keine Antworten in dieser Woche Ende testen konnte, ist dies für die Arbeit, aber ich werde ein Auge auf Ihre Antworten halten –