Как заставить 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, он просто работает из коробки.