Es gibt eine Option für den Java-Compiler, mit der das Ausgabeverzeichnis für generierte Java-Quellen angepasst werden kann (documentation).
es dir
das Verzeichnis angeben, wo die Dateien zu platzieren erzeugen Quelle. Das Verzeichnis muss bereits existieren. javac wird es nicht erstellen. Wenn eine Klasse Teil eines Pakets ist, fügt der Compiler die Quelldatei in ein Unterverzeichnis ein, das den Paketnamen widerspiegelt und Verzeichnisse nach Bedarf erstellt. Wenn Sie beispielsweise -s C: \ mysrc angeben und die Klasse com.mypackage.MyClass heißt, wird die Quelldatei in C: \ mysrc \ com \ mypackage \ MyClass.java platziert.
Beispiel build.gradle
compileJava {
options.compilerArgs << "-s"
options.compilerArgs << "$projectDir/generated/java"
doFirst {
// make sure that directory exists
file(new File(projectDir, "/generated/java")).mkdirs()
}
}
clean.doLast {
// clean-up directory when necessary
file(new File(projectDir, "/generated")).deleteDir()
}
sourceSets {
generated {
java {
srcDir "$projectDir/generated/java"
}
}
}
Dieser Code-Schnipsel tut nächste:
- erstellt und legt Verzeichnis als Ausgang für generierten Code
- löscht erzeugt Quellen, wenn saubere Aufgabe aufgerufen wird
- fügt neuen Quellensatz hinzu
aktualisieren
Verwenden gradle apt plugin statt.
Danke für die Lösung - es funktioniert gut für mich, mit einem Tweak in, dass ich es vorziehe, die generierten Dateien in '$ project.buildDir/generated/java' zu setzen, da dies bedeutet, dass Sie sich keine Sorgen machen müssen wie sauber funktioniert. Außerdem scheint es nicht nötig zu sein, eine Quellmenge hinzuzufügen, die trotzdem funktioniert. –
Wenn sonst bei nachfolgenden Kompilierungen ein Java-Kompilierfehler auftritt .. fügen Sie dem doFirst-Block Folgendes hinzu: 'GFileUtils.cleanDirectory (directory); '.. abhängig von Ihrer Version von Gradle müssen Sie möglicherweise' FileUtils.cleanDirectory' – Darwayne
@ PetterMåhlen verwenden, warum die Konfiguration von sourceSet optional ist? Gradle benötigt es, um jar zu erstellen, das die generierten Klassen enthält. – Sunnyday