13

我使用 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()'

我尝试providedcompileOnlyand替换compile,但是@Value.Immutable没有生成带有注释的接口的实现。

我如何使它工作?

4

2 回答 2

13

找到了答案。分享以防对任何人(或将来我自己)有帮助。

首先,我必须在 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.

于 2017-11-17T14:04:27.567 回答
7

我无法添加评论(代表太低),但对于未来的读者,我想扩展Vasiliy answer

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

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

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

于 2020-01-26T11:09:55.553 回答