.class 文件中未生成 Lombok 注释
Lombok annotations are not generated in .class file
我正在使用 inteliJ pro 2020,java 11,maven
和 lombok
。
在运行mvn clean install
之后生成了一个jar。当我检查 jar 中的特定 class 文件时,它有一些 lombok
注释,例如 @Data, @NoArgsConstructor, @Setter
,注释丢失了。
例如:
原文class:
import com.fasterxml.jackson.annotation.JsonTypeName;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import java.util.Date;
import java.util.Set;
import org.apache.logging.log4j.util.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Data
@Setter
@NoArgsConstructor
@JsonTypeName("Bclass")
@Slf4j
public class B extends A{
.class jar 文件:
import com.fasterxml.jackson.annotation.JsonTypeName;
import java.util.Date;
import java.util.Set;
import org.apache.logging.log4j.util.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@JsonTypeName("Bclass")
public class B extends A{
lombock 注释和导入消失了。
我当前的 pom 设置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<compilerVersion>11</compilerVersion>
<release>11</release>
<annotationProcessors>
<annotationProcessor>lombok.launch.AnnotationProcessorHider$AnnotationProcessor</annotationProcessor>
</annotationProcessors>
</configuration>
</plugin>
</plugins>
</build>
......
<dependencies>
.....
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
....
我尝试过的解决方案:
- 在编译器设置中启用注释处理。
- 在 pom.xml 的构建部分使用 and .
- 从 pom 中移除 annotationProcessor。
我的目标是为该项目创建一个 jar 并将其导入到另一个项目中。问题是当我将 jar 导入另一个项目时,所有的 lombok 注释都丢失了,我可以使用 get 和 set 方法。
有什么建议吗?
Lombok 注释不应该出现在编译代码中。 lombok 的重点是生成样板代码,但要使编译后的字节码看起来不像样板代码。原因是lombok注解声明中的RetentionPolicy:
@Retention(RetentionPolicy.SOURCE)
表示注释将在编译步骤后删除,不再是字节码的一部分。
我正在使用 inteliJ pro 2020,java 11,maven
和 lombok
。
在运行mvn clean install
之后生成了一个jar。当我检查 jar 中的特定 class 文件时,它有一些 lombok
注释,例如 @Data, @NoArgsConstructor, @Setter
,注释丢失了。
例如:
原文class:
import com.fasterxml.jackson.annotation.JsonTypeName;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import java.util.Date;
import java.util.Set;
import org.apache.logging.log4j.util.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Data
@Setter
@NoArgsConstructor
@JsonTypeName("Bclass")
@Slf4j
public class B extends A{
.class jar 文件:
import com.fasterxml.jackson.annotation.JsonTypeName;
import java.util.Date;
import java.util.Set;
import org.apache.logging.log4j.util.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@JsonTypeName("Bclass")
public class B extends A{
lombock 注释和导入消失了。
我当前的 pom 设置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<compilerVersion>11</compilerVersion>
<release>11</release>
<annotationProcessors>
<annotationProcessor>lombok.launch.AnnotationProcessorHider$AnnotationProcessor</annotationProcessor>
</annotationProcessors>
</configuration>
</plugin>
</plugins>
</build>
......
<dependencies>
.....
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
....
我尝试过的解决方案:
- 在编译器设置中启用注释处理。
- 在 pom.xml 的构建部分使用 and .
- 从 pom 中移除 annotationProcessor。
我的目标是为该项目创建一个 jar 并将其导入到另一个项目中。问题是当我将 jar 导入另一个项目时,所有的 lombok 注释都丢失了,我可以使用 get 和 set 方法。 有什么建议吗?
Lombok 注释不应该出现在编译代码中。 lombok 的重点是生成样板代码,但要使编译后的字节码看起来不像样板代码。原因是lombok注解声明中的RetentionPolicy:
@Retention(RetentionPolicy.SOURCE)
表示注释将在编译步骤后删除,不再是字节码的一部分。