Esiste un'opzione per il compilatore java che consente di personalizzare la directory di output per le origini java generate (documentation).
-s dir
Specificare la directory in cui posizionare i file di origine generati. La directory deve già esistere; javac non lo creerà. Se una classe è una parte di un pacchetto, , il compilatore pone il file sorgente in una sottodirectory che riflette il nome del pacchetto, creando le directory secondo necessità. Per esempio , se si specifica -s C: \ mysrc e la classe è chiamata com.mypackage.MyClass, il file di origine verrà inserito in C: \ mysrc \ com \ mypackage \ MyClass.java.
Esempio di 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"
}
}
}
Questo frammento di codice fa successivo:
- crea e specifica directory di output per il codice generato
- elimina fonti generate se un'attività pulita viene richiamato
- aggiunge un nuovo set di origini
Aggiornamento
Usa Gradle apt plugin invece.
fonte
2016-06-14 22:04:48
Grazie per la soluzione, funziona benissimo per me, con un ritocco in cui preferisco mettere i file generati in '$ project.buildDir/generated/java', poiché ciò significa che non devi preoccuparti di cambiare quanto funziona pulito. Inoltre, non sembra esserci la necessità di aggiungere effettivamente un set sorgente, che funziona comunque. –
Se qualcun altro esegue un errore di compilazione java sulle ricompilazioni successive, aggiungere quanto segue al blocco doFirst: 'GFileUtils.cleanDirectory (directory); '.. A seconda della versione di gradle potrebbe essere necessario utilizzare' FileUtils.cleanDirectory' – Darwayne
@ PetterMåhlén, perché la configurazione di sourceSet è facoltativa? gradle ha bisogno di esso per costruire jar che include le classi generate. – Sunnyday