Как заставить GitHub Immutables работать в IntelliJ + Gradle

Я использую библиотеку GitHub Immutables для разработки под Android, и теперь я хочу попробовать ее и на бэкэнде.

В Android все, что мне нужно для использования библиотеки, это:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    // immutable entities generation
    provided "org.immutables:value:2.5.5" // for annotations
    provided "org.immutables:builder:2.5.5" // for annotations
    provided "org.immutables:gson:2.5.5" // for annotations

    ... other dependencies
}

Когда я пытаюсь скопировать вышеупомянутые зависимости в build.gradle моего проекта Java, я получаю эту ошибку:

Error:(24, 0) Gradle DSL method not found: 'provided()'

Я пытался заменить provided с compileOnly а также compile, но тогда реализации интерфейсов аннотированы @Value.Immutable не генерируются.

Как мне заставить это работать?

1 ответ

Решение

Нашел ответ. Обмен на случай, если это будет полезно кому-либо (или мне в будущем).

Прежде всего мне пришлось включить обработку аннотаций в IntelliJ, как описано здесь (хотя опция теперь находится в Settings > Build, Execution, Deployment > Compiler > Annotation Processors).

После этого следующий код начал фактически генерировать реализацию:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    // immutable entities generation
    compile "org.immutables:value:2.5.5" // for annotations
    compile "org.immutables:builder:2.5.5" // for annotations
    compile "org.immutables:gson:2.5.5" // for annotations

    ... other dependencies
}

Однако я все еще не мог автоматически импортировать реализацию в исходные файлы.

Чтобы разрешить обнаружение сгенерированных классов, мне пришлось щелкнуть правой кнопкой мыши на generated папка в main пакет, а затем Mark Directory As > Generated Sources Root,

Не могу добавить комментарий (слишком низкая репутация), но для будущих читателей хочу продлить ответ Василия.

В моем случае (оболочка gradle в версии 5.2.1) следующий код автоматически обнаруживает сгенерированные источники:

dependencies {
    def immutablesVersion = "2.8.2"
    annotationProcessor "org.immutables:value:$immutablesVersion" // <--- this is important
    compileOnly "org.immutables:value:$immutablesVersion"
}

Мне не нужно ничего менять в параметрах процессора аннотаций IDE, он просто работает из коробки.

Другие вопросы по тегам