如何使 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
}

当我尝试将上述依赖项复制到我的Java项目中时,我收到以下错误:build.gradle

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

我试图用 和 替换,但是没有生成注释的接口的实现。providedcompileOnlycompile@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
}

但是,我仍然无法自动将实现导入源文件。

为了允许发现生成的类,我不得不右键单击包中的文件夹,然后。generatedmainMark Directory As > Generated Sources Root


答案 2

我不能添加评论(代表太低),但对于未来的读者,我想扩展Vasiliy的答案

在我的情况下(版本5.2.1中的gradle包装器),以下代码会自动神奇地发现生成的源:

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

我不需要在IDE注释处理器选项中更改任何内容,它只是开箱即用。


推荐