Интеграция обработчиков аннотаций с помощью Gradle
Мне нужно написать некоторые обработчики аннотаций. Я нашел этот пост в блоге, в котором упоминается, как это можно сделать в общей настройке и с Eclipse.
Однако я использую IntelliJ IDEA и Gradle, и так хотелось, если бы это было лучше (как в, менее утомительном) подходе. Что я ищу:
- Я должен иметь возможность писать как обработчики аннотаций, так и код, который будет потреблять их в одном проекте, и Gradle должен обрабатывать добавление процессоров в путь класса и вызывать их с помощью javac на этапе approrpiate.
OR
- Если выше это невозможно, и мне нужно создать два отдельных проекта, то, по крайней мере, их можно сохранить в том же хранилище git. Gradle должен легко обрабатывать сборку.
OR
- Если ни один из них невозможен, и мне нужно создать два отдельных хранилища git, то, по крайней мере, Gradle должен без проблем справляться с вещами, упомянутыми в связанном блоге.
Мои навыки git и Gradle - это уровень начинающих. Я был бы признателен за любую помощь в решении этой задачи. Спасибо.
Ответы
Ответ 1
Другим решением (по моему мнению, более чистым) может быть наличие двух подпроектов, а затем просто сделать тот, который содержит обработчики аннотаций, зависимость от главный. Поэтому, учитывая два каталога с вашими подпроектами: core
и annotation-processors
в корне вашего проекта, вам также необходимо иметь файл settings.gradle
со следующим:
include 'core'
include 'annotation-processors'
И затем в файле gradle для основного проекта:
dependencies {
compile project(':annotation-processors')
}
Это должно сделать это, и вам не придется иметь дело с пользовательскими задачами компиляции и их классами.
Ответ 2
Да, можно переместить процессор в отдельный модуль и использовать его из другого модуля (см. ниже querydslapt
).
Я рекомендую вам реализовать свой собственный AbstractProcessor
и используйте его так:
dependencies {
....
// put dependency to your module with processor inside
querydslapt "com.mysema.querydsl:querydsl-apt:$querydslVersion"
}
task generateQueryDSL(type: JavaCompile, group: 'build', description: 'Generates the QueryDSL query types') {
source = sourceSets.main.java // input source set
classpath = configurations.compile + configurations.querydslapt // add processor module to classpath
// specify javac arguments
options.compilerArgs = [
"-proc:only",
"-processor", "com.mysema.query.apt.jpa.JPAAnnotationProcessor" // your processor here
]
// specify output of generated code
destinationDir = sourceSets.generated.java.srcDirs.iterator().next()
}
Вы можете найти полный пример здесь