Существует опция для java-компилятора, которая позволяет настраивать выходной каталог для сгенерированных источников java (documentation).
-s реж
Укажите директорию, куда поместить сгенерированные исходные файлы. Каталог должен уже существовать; javac не создаст его. Если класс содержит часть пакета, компилятор помещает исходный файл в подкаталог , отражающий имя пакета, при необходимости создавая каталоги. Для примера , если вы укажете -s C: \ mysrc, а класс называется com.mypackage.MyClass, тогда исходный файл будет помещен в C: \ mysrc \ com \ mypackage \ MyClass.java.
Пример 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"
}
}
}
Этот фрагмент кода делает следующий:
- создает и определяет каталог в качестве вывода для генерируемого кода
- удаляет сгенерированные источники, если чистая задача вызывается
- добавляет новый источник
Update
Используйте Gradle apt plugin вместо этого.
Спасибо за решение - он отлично работает для меня, с настройкой, в которой я предпочитаю помещать сгенерированные файлы в '$ project.buildDir/сгенерированные/java', так как это означает, что вам не нужно беспокоиться об изменении как работает чистая. Кроме того, нет необходимости фактически добавлять набор источников, который работает в любом случае. –
Если какой-либо другой пользователь сталкивается с ошибкой компиляции java при последующих перекомпиляциях. Добавьте следующее в блок doFirst: 'GFileUtils.cleanDirectory (каталог); '.. в зависимости от вашей версии градиента вам может понадобиться использовать FileUtils.cleanDirectory' – Darwayne
@ PetterMåhlén, почему конфигурация sourceSet необязательна? gradle нуждается в его создании jar, который включает сгенерированные классы. – Sunnyday