javapoet如何生成注解并使用lombok?
How to generate annotations and use lombok with javapoet?
当我使用 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
可能是因为 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
,因为不经意的 reader 可能会认为这是错误的,并且也许再次尝试将其更改为 provided
。
当我使用 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
可能是因为 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
,因为不经意的 reader 可能会认为这是错误的,并且也许再次尝试将其更改为 provided
。