【问题标题】:Lombok @Value annotation not generating @ConstructorProperties in EclipseLombok @Value 注释未在 Eclipse 中生成 @ConstructorProperties
【发布时间】: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


    【解决方案1】:

    我最终发现了问题。由于除了必须在 lombok.config 中打开的一个注释之外,注释都在工作,我假设 lombok.config 没有加载,并在 Lombok 中提取并测试了一些“冒泡”目录结构的代码找到 lombok.config 文件。

    结论:冒泡不适用于具有 UNC 路径的文件夹。我不确定这是否是 Java 文件 IO 的限制或 Lombok 使用它的方式。我在 WSL 下的 Ubuntu 中有我的源代码,因此我的手动 Maven 构建是 Linux 的,这意味着在 \wsl$\Ubuntu 下设置 Eclipse 项目......这种路径格式无法在冒泡代码中存活。

    解决方案是将 Windows 驱动器映射到 \wsl$\ 网络位置并删除并重新创建驱动器下的所有 Eclipse 项目,因此项目路径现在是 G:/... 而不是 \wsl$\Ubuntu ...

    【讨论】:

    • 你可以在github.com/projectlombok/lombok/issues提交一个错误
    • 谢谢,您的回复帮助我发现了一个类似的问题:在我的情况下,由于 .dockerignore,lombok.config 在编译时在多级 docker 中不可用
    猜你喜欢
    • 2017-07-07
    • 2021-09-19
    • 2016-05-05
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    相关资源
    最近更新 更多