Android Studio 找不到来自 lombok 的 AllArgsConstructor
AllArgsConstructor from lombok is not found by Android Studio
当我创建一个包含一个或多个字段的新 Java class 并将来自 lombok 的 @AllArgsConstructor
注释附加到它时,我收到此消息
Error:(9, 1) error: cannot find symbol class ConstructorProperties
来自 Gradle 构建控制台。我能够通过使用此配置创建一个新的空 Android 项目来重现这一点。
Class(从未使用或实例化)
@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 的错误还是这个错误位于屏幕前面?
Lombok 默认为所有生成的构造函数生成 @ConstructorProperties
。在 Android,该注释不可用。如 documentation 中所述,可以通过为每个 @XxxArgsConstructor 指定 suppressConstructorProperties=true
或在高级 lombok.config
文件中使用以下行来抑制生成:
lombok.anyConstructor.suppressConstructorProperties = true
披露:我是 Lombok 开发人员
您需要在 AllArgsConstructors 中添加抑制。如果你不想添加新的配置文件,你可以简单地这样做:
@AllArgsConstructor(suppressConstructorProperties = true)
披露:我不是 Lombok 开发人员 :D
另外:
如果您在 Android 项目中以 Java 8 为目标(例如通过使用 retrolambda),则不会出现此错误。
@AllArgsConstructor(suppressConstructorProperties = true)
解决方案不再有效。如果您尝试这样做,您会得到以下结果:
This deprecated feature is no longer supported. Remove it; you can
create a lombok.config file with
'lombok.anyConstructor.suppressConstructorProperties = true'.
有效的解决方案是将 lombok.anyConstructor.suppressConstructorProperties = true
添加到 lombok.config
文件。
更新 Android Studio 后我遇到了同样的问题。
None 其他答案(包括已接受的答案)对我有帮助。
最后我将 lombok 版本更新为 1.16.20
(今天最新的)并且错误消失了。
希望它能为某人节省时间。
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
当我创建一个包含一个或多个字段的新 Java class 并将来自 lombok 的 @AllArgsConstructor
注释附加到它时,我收到此消息
Error:(9, 1) error: cannot find symbol class ConstructorProperties
来自 Gradle 构建控制台。我能够通过使用此配置创建一个新的空 Android 项目来重现这一点。
Class(从未使用或实例化)
@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 的错误还是这个错误位于屏幕前面?
Lombok 默认为所有生成的构造函数生成 @ConstructorProperties
。在 Android,该注释不可用。如 documentation 中所述,可以通过为每个 @XxxArgsConstructor 指定 suppressConstructorProperties=true
或在高级 lombok.config
文件中使用以下行来抑制生成:
lombok.anyConstructor.suppressConstructorProperties = true
披露:我是 Lombok 开发人员
您需要在 AllArgsConstructors 中添加抑制。如果你不想添加新的配置文件,你可以简单地这样做:
@AllArgsConstructor(suppressConstructorProperties = true)
披露:我不是 Lombok 开发人员 :D
另外:
如果您在 Android 项目中以 Java 8 为目标(例如通过使用 retrolambda),则不会出现此错误。
@AllArgsConstructor(suppressConstructorProperties = true)
解决方案不再有效。如果您尝试这样做,您会得到以下结果:
This deprecated feature is no longer supported. Remove it; you can create a lombok.config file with 'lombok.anyConstructor.suppressConstructorProperties = true'.
有效的解决方案是将 lombok.anyConstructor.suppressConstructorProperties = true
添加到 lombok.config
文件。
更新 Android Studio 后我遇到了同样的问题。
None 其他答案(包括已接受的答案)对我有帮助。
最后我将 lombok 版本更新为 1.16.20
(今天最新的)并且错误消失了。
希望它能为某人节省时间。
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