如何使GitHub的Immutables在IntelliJ + Gradle中工作

时间:2017-11-17 13:40:16

标签: java intellij-idea gradle build.gradle immutables-library

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

我尝试将provided替换为compileOnlycompile,但是不会生成使用@Value.Immutable注释的接口的实现。

如何让它发挥作用?

2 个答案:

答案 0 :(得分:7)

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

首先,我必须按照here所述在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

答案 1 :(得分:3)

我无法添加评论(回复率太低),但是对于以后的读者,我想扩展Vasiliy answer

就我而言(版本5.2.1中的渐变包装器),以下代码自动神奇地发现了生成的源:

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

我不需要在IDE注释处理器选项中进行任何更改,它可以直接使用。