如何生成注解并将lombok与javapoet一起使用?

jm2pwxwz  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(452)

当我使用javapoet时,是否有任何方法(和意义)使用lombok?
下面是一个例子:

  1. TypeSpec typeSpec = TypeSpec
  2. .classBuilder("MyDtoWithLombok")
  3. .addModifiers(Modifier.PUBLIC)
  4. //.addAnnotation(NoArgsConstructor.class)
  5. //.addAnnotation(AllArgsConstructor.class)
  6. //.addAnnotation(Data.class)
  7. //.addAnnotation(Builder.class)
  8. .addField(...)
  9. .build();

当我尝试添加lombok注解(如->data.class)时,我得到以下错误:

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

wdebmtf21#

可能是因为lombok通常被赋予了作用域——您通常不希望它出现在类路径上,因为它应该在编译时被处理和删除。

  1. <dependency>
  2. <groupId>org.projectlombok</groupId>
  3. <artifactId>lombok</artifactId>
  4. <version>1.18.20</version>
  5. <scope>provided</scope>
  6. </dependency>

移除 <scope>provided</scope> 行,或将其更改为 compile . 两者都是等价的,因为 compile 是默认值。
我个人会明确使用 compile 甚至可能添加一条注解,解释为什么不使用 provided ,因为一个普通读者可能会认为这是一个错误,或者尝试将其改为 provided 再一次。

相关问题