Подтвердить что ты не робот

Интеграция обработчиков аннотаций с помощью Gradle

Мне нужно написать некоторые обработчики аннотаций. Я нашел этот пост в блоге, в котором упоминается, как это можно сделать в общей настройке и с Eclipse.

Однако я использую IntelliJ IDEA и Gradle, и так хотелось, если бы это было лучше (как в, менее утомительном) подходе. Что я ищу:

  • Я должен иметь возможность писать как обработчики аннотаций, так и код, который будет потреблять их в одном проекте, и Gradle должен обрабатывать добавление процессоров в путь класса и вызывать их с помощью javac на этапе approrpiate.
    OR
  • Если выше это невозможно, и мне нужно создать два отдельных проекта, то, по крайней мере, их можно сохранить в том же хранилище git. Gradle должен легко обрабатывать сборку.
    OR
  • Если ни один из них невозможен, и мне нужно создать два отдельных хранилища git, то, по крайней мере, Gradle должен без проблем справляться с вещами, упомянутыми в связанном блоге.

Мои навыки git и Gradle - это уровень начинающих. Я был бы признателен за любую помощь в решении этой задачи. Спасибо.

4b9b3361

Ответ 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()
}

Вы можете найти полный пример здесь