【问题标题】:AllArgsConstructor from lombok is not found by Android StudioAndroid Studio 找不到来自 lombok 的 AllArgsConstructor
【发布时间】:2015-01-15 17:29:46
【问题描述】:

当我创建一个具有一个或多个字段的新 Java 类并将 lombok 中的 @AllArgsConstructor 注释附加到它时,我会收到此消息

Error:(9, 1) error: cannot find symbol class ConstructorProperties

来自 Gradle Build 控制台。我能够通过使用此配置创建一个新的空 Android 项目来重现这一点。

类(从未使用或实例化)

@lombok.AllArgsConstructor
public class Model {
    int foo;
    String bar;
}

build.gradle:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
provided 'org.projectlombok:lombok:1.14.8'
}

来自lombok的@Getter@Setter不会引起任何问题,甚至gradle也没有提到@NoArgsConstructor,如果没有字段,AllArgsConstructor也是如此。

这是来自 Lombok 的错误还是位于屏幕前面的错误?

【问题讨论】:

    标签: java android android-studio lombok


    【解决方案1】:

    Lombok 默认为所有生成的构造函数生成@ConstructorProperties。在 Android 上,该注释不可用。如documentation 中所述,可以通过为每个@XxxArgsConstructor 指定suppressConstructorProperties=true 或在高级lombok.config 文件中使用以下行来抑制生成:

    lombok.anyConstructor.suppressConstructorProperties = true
    

    披露:我是 Lombok 开发人员

    【讨论】:

    • 嘿罗尔。我遇到了完全相同的问题(我是龙目岛的新手)。我正在使用 Android Studio 1.3 预览版 4、lombok1.12.6 和 lombok 插件 0.9.4.14。在我的项目根目录中,我有一个带有两行的 lombok.conifg 文件:lombok.anyConstructor.suppressConstructorProperties = trueconfig.stopBubbling = true。但我仍然得到与 Ohem 相同的错误。你能帮帮我吗?
    • AFAIK,Android Studio 基于 IntelliJ。可能是其他开发者开发的 IntelliJ 插件还不支持配置系统。
    • 啊,我明白了。所以我想唯一的方法是明确添加@AllArgsConstructor(suppressConstructorProperties = true) 对吗?顺便说一句,和龙目岛一起工作真的很棒。继续往前走 ;)
    • 仅供参考,我现在可以将 lombok.config 与 IntelliJ 14、Lombok 插件 0.9.6.14 和 Lombok 1.16.4 一起使用。干得好,伙计们! +1
    • 这不适用于 Android Studio 吗?我也安装了插件
    【解决方案2】:

    您需要在 AllArgsConstructors 中添加抑制。如果你不想添加新的配置文件,你可以这样做:

    @AllArgsConstructor(suppressConstructorProperties = true)
    

    披露:我不是 Lombok 开发人员:D

    【讨论】:

    • 爱你的披露:-)
    【解决方案3】:

    我在更新 Android Studio 后遇到了同样的问题。

    包括接受的答案在内的其他答案都没有帮助我。

    最后我把lombok版本更新为1.16.20(今天最新的),错误消失了。

    希望它能为某人节省时间。

    【讨论】:

      【解决方案4】:

      还有:

      如果您在 Android 项目中以 Java 8 为目标(例如使用 retrolambda),则不会出现此错误。

      【讨论】:

        【解决方案5】:

        @AllArgsConstructor(suppressConstructorProperties = true) 解决方案不再有效。如果你试试这个,你会得到以下结果:

        不再支持此已弃用的功能。去掉它;你可以 创建一个 lombok.config 文件 'lombok.anyConstructor.suppressConstructorProperties = true'。

        有效的解决方案是将lombok.anyConstructor.suppressConstructorProperties = true 添加到lombok.config 文件中。

        【讨论】:

          【解决方案6】:

          Lombok 现在不支持注解 suppressConstructorProperties。如果您尝试删除 (suppressConstructorProperties = true),您将收到以下错误:

          Error:(9, 1) error: cannot find symbol class ConstructorProperties
          

          以下是解决此问题的步骤: 1. 从对象中移除 (suppressConstructorProperties = true)。 2. 转到项目级目录。在您的应用程序中创建一个 lombok.config 文件。 3. 将以下代码粘贴到配置文件中。

          config.stopBubbling = true
          lombok.addGeneratedAnnotation = false
          lombok.accessors.chain = false
          lombok.anyConstructor.suppressConstructorProperties = true
          

          【讨论】:

            猜你喜欢
            • 2019-06-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多