java - 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
解决方案
可能是因为 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
再次将其更改为。
推荐阅读
- python - 当我将真实值与它们的平均值进行比较时,r2_score() 获得非零值
- python - 如何使用 Python 通过用户名获取 Steam ID?
- c# - 在.net核心中的应用程序启动期间自动映射器映射验证?
- machine-learning - 在 MIT BIH NST 数据集上使用 ICA
- reactjs - 注销时完全删除或重置 redux thunk store
- javascript - TypeError:无法读取未定义的属性“地图”,打字稿中的reactjs
- api - Postmates API 是否像 Postmate 应用程序 UI 那样涵盖实际的“搜索提供商 + 订单 + 付款”
- javascript - React Native Picker onValueChange 问题
- jenkins - 使用文本编辑器配置 Jenkins 作业的 UI 元素
- ios - 当应用程序返回前台时删除任何弹出窗口