首页 > 解决方案 > javapoet如何生成注释和使用lombok?

问题描述

当我使用 javapoet 时,有什么方法(和任何意义)可以使用 Lombok 吗?
这是示例:

TypeSpec typeSpec = TypeSpec
        .classBuilder("MyDtoWithLombok")
        .addModifiers(Modifier.PUBLIC)
        //.addAnnotation(NoArgsConstructor.class)
        //.addAnnotation(AllArgsConstructor.class)
        //.addAnnotation(Data.class)
        //.addAnnotation(Builder.class)
        .addField(...)
        .build();

当我尝试添加 Lombok 注释时(例如 -> Data.class"),我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: lombok/NoArgsConstructor
...
Caused by: java.lang.ClassNotFoundException: lombok.NoArgsConstructor
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 3 more

标签: javalombokjavapoet

解决方案


可能是因为 Lombok 通常被赋予提供的范围——您通常不希望它出现在类路径中,因为它应该在编译时被处理和删除。

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
    <scope>provided</scope>
</dependency>

删除该<scope>provided</scope>行,或将其更改为compile. 两者是等价的,因为compile是默认值。

我个人会明确地使用compile,甚至可能添加一条评论来解释你为什么不使用provided,因为普通读者可能会认为这是一个错误,并且可能会尝试provided再次将其更改为。


推荐阅读