【发布时间】:2021-04-29 17:07:00
【问题描述】:
我在一个 Maven 项目中有以下代码,该项目从命令行编译和运行(OpenJDK 15.0.2 在 Ubuntu 下的 Windows 子系统 Linux 下运行)。它使用相关 Jackson 库的 Lombok 1.18.20 和 2.12.3 版。
Eclipse 20210312-0638 在 Windows OpenJDK 15.0.2 下运行(我对 Eclipse 内置 JRE 有相同的行为,安装了 Windows JDK 以查看它是否有帮助)。 Lombok 1.18.20 安装在 Eclipse 中(并显示在 About... 对话框中)。
当我在 Eclipse 中将下面的类作为 Java 应用程序运行时,我得到:
Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `lomboktest.Main$Input` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
我已经反编译了由命令行 Maven 构建和在 Eclipse 中运行 Maven 更新创建的类文件。 Eclipse 版本缺少@ConstructorProperties 注释,但它存在于命令行版本中。构造函数、getter 和 setter 是由 Eclipse 版本中预期的 @Value 注解创建的,因此 Lombok 在某种程度上完成了这项工作。
我在项目根目录下有lombok.config:
lombok.anyConstructor.addConstructorProperties = true
config.stopBubbling = true
如果我使用 @ConfigurationProperties 注释添加一个显式的全参数构造器,那么在 Eclipse 中一切都运行良好。
我不知道在哪里寻找差异。我已经修改了可以在 Eclipse 中找到的任何与注释相关的设置,但没有成功。我看过一些关于影响 Lombok 注释的模块依赖项的帖子,但我没有(故意)使用模块。
谁能建议我需要做些什么才能在 Eclipse 中运行它,或者至少我可以在接下来进行调查以找出问题所在?
package lomboktest;
import java.io.InputStream;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import lombok.Value;
public class Main {
@Value
public static class Input
{
private String a;
private String b;
}
public static void main(String[] args) throws Exception
{
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
try (InputStream input = Main.class.getResourceAsStream("/input.yml"))
{
System.out.println(mapper.readValue(input, Input.class));
}
}
}
【问题讨论】:
标签: java eclipse lombok configurationproperties