投稿:Dreamer,作者联系方式:sdcuike.blog.csdn.net
现象
Spring Cloud项目由Java8 升级Java11,导致编译一直卡住。
排查工具
maven编译器插件选项,查看编译日志详情。
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<useIncrementalCompilation>false</useIncrementalCompilation>
<showWarnings>true</showWarnings>
<debuglevel>lines,vars,source</debuglevel>
</configuration>
</plugin>
</plugins>
</build>
让我们能详细地看到处理过程。
[INFO] Compiling 2 source files to /Users/renzhi/gitlab/demo/demo-api/target/classes
[语法分析开始时间 SimpleFileObject[/Users/renzhi/gitlab/demo/demo-api/src/main/java/com/renzhikeji/demo/api/demoapi/DemoApiApplication.java]]
[语法分析已完成, 用时 18 毫秒]
[语法分析开始时间 SimpleFileObject[/Users/renzhi/gitlab/demo/demo-api/src/main/java/com/renzhikeji/demo/api/demoapi/demo/Test.java]]
[语法分析已完成, 用时 1 毫秒]
[正在加载/modules/java.compiler/module-info.class]
[正在加载/modules/jdk.compiler/module-info.class]
[正在加载/modules/java.xml/module-info.class]
[正在加载/modules/java.sql/module-info.class]
[正在加载/modules/jdk.hotspot.agent/module-info.class]
[正在加载/modules/jdk.security.auth/module-info.class]
[正在加载/modules/jdk.accessibility/module-info.class]
[正在加载/modules/java.logging/module-info.class]
[正在加载/modules/jdk.management.jfr/module-info.class]
[正在加载/modules/jdk.dynalink/module-info.class]
[正在加载/modules/jdk.incubator.vector/module-info.class]
[正在加载/modules/jdk.internal.le/module-info.class]
[正在加载/modules/jdk.management/module-info.class]
[正在加载/modules/java.security.sasl/module-info.class]
[正在加载/modules/jdk.xml.dom/module-info.class]
[正在加载/modules/java.instrument/module-info.class]
[正在加载/modules/jdk.security.jgss/module-info.class]
[正在加载/modules/jdk.jsobject/module-info.class]
[正在加载/modules/jdk.jpackage/module-info.class]
[正在加载/modules/jdk.sctp/module-info.class]
[正在加载/modules/jdk.incubator.foreign/module-info.class]
[正在加载/modules/jdk.jfr/module-info.class]
[正在加载/modules/jdk.internal.vm.ci/module-info.class]
[正在加载/modules/java.naming/module-info.class]
[正在加载/modules/jdk.attach/module-info.class]
[正在加载/modules/jdk.httpserver/module-info.class]
[正在加载/modules/jdk.jdi/module-info.class]
[正在加载/modules/jdk.editpad/module-info.class]
[正在加载/modules/java.management/module-info.class]
[正在加载/modules/jdk.jstatd/module-info.class]
[正在加载/modules/jdk.internal.vm.compiler.management/module-info.class]
[正在加载/modules/jdk.management.agent/module-info.class]
[正在加载/modules/java.transaction.xa/module-info.class]
[正在加载/modules/java.datatransfer/module-info.class]
[正在加载/modules/jdk.localedata/module-info.class]
[正在加载/modules/jdk.nio.mapmode/module-info.class]
[正在加载/modules/java.rmi/module-info.class]
[正在加载/modules/jdk.naming.dns/module-info.class]
[正在加载/modules/java.management.rmi/module-info.class]
[正在加载/modules/jdk.jconsole/module-info.class]
[正在加载/modules/jdk.jcmd/module-info.class]
[正在加载/modules/jdk.internal.ed/module-info.class]
[正在加载/modules/jdk.internal.vm.compiler/module-info.class]
[正在加载/modules/jdk.naming.rmi/module-info.class]
[正在加载/modules/java.smartcardio/module-info.class]
[正在加载/modules/java.base/module-info.class]
[正在加载/modules/jdk.unsupported.desktop/module-info.class]
[正在加载/modules/java.xml.crypto/module-info.class]
[正在加载/modules/java.scripting/module-info.class]
[正在加载/modules/jdk.charsets/module-info.class]
[正在加载/modules/jdk.jdwp.agent/module-info.class]
[正在加载/modules/jdk.zipfs/module-info.class]
[正在加载/modules/jdk.crypto.ec/module-info.class]
[正在加载/modules/jdk.crypto.cryptoki/module-info.class]
[正在加载/modules/java.net.http/module-info.class]
[正在加载/modules/java.desktop/module-info.class]
[正在加载/modules/jdk.internal.jvmstat/module-info.class]
[正在加载/modules/java.security.jgss/module-info.class]
[正在加载/modules/jdk.jshell/module-info.class]
[正在加载/modules/java.sql.rowset/module-info.class]
[正在加载/modules/jdk.jlink/module-info.class]
[正在加载/modules/jdk.javadoc/module-info.class]
[正在加载/modules/jdk.random/module-info.class]
[正在加载/modules/jdk.net/module-info.class]
[正在加载/modules/jdk.unsupported/module-info.class]
[正在加载/modules/java.prefs/module-info.class]
[正在加载/modules/jdk.internal.opt/module-info.class]
[正在加载/modules/java.se/module-info.class]
[正在加载/modules/jdk.jdeps/module-info.class]
[正在加载/modules/jdk.jartool/module-info.class]
[源文件的搜索路径: /Users/renzhi/gitlab/demo/demo-api/src/main/java,/Users/renzhi/gitlab/demo/demo-api/target/generated-sources/annotations]
[类文件的搜索路径: /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib/modules,/Users/renzhi/gitlab/demo/demo-api/target/classes,/Users/renzhi/.m2/repository/org/springframework/bng-boot-starter-web/2.6.6/spring-boot-starter-web-2.6.6.jar,/Users/renzhi/.m2/repository/org/springframework/boot/spring-boot-starter/2.6.6/spring-boot-starter-2.6.6.jar,/Users/renzhi/.m2/repository/org/springframework/boot/spring-boot-starter-logging/2.6.6/spring-boot-starter-logging-2.6.6.jar,/Users/renzhi/.m2/repository/ch/qos/logback/logback-classic/1.2.11/logback-classic-1.2.11.jar,/Users/renzhi/.m2/repository/ch/qos/logback/logback-core/1.2.11/logback-core-1.2.11.jar,/Users/renzhi/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.17.2/log4j-to-slf4j-2.17.2.jar,/Users/renzhi/.m2/repository/org/apache/logging/log4j/log4j-api/2.17.2/log4j-api-2.17.2.jar,/Users/renzhi/.m2/repository/org/slf4j/jul-to-slf4j/1.7.36/jul-to-slf4j-1.7.36.jar,/Users/renzhi/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar,/Users/renzhi/.m2/repository/org/yaml/snakeyaml/1.29/snakeyaml-1.29.jar,/Users/renzhi/.m2/repository/org/springframework/boot/spring-boot-starter-json/2.6.6/spring-boot-starter-json-2.6.6.jar,/Users/renzhi/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.13.2.2/jackson-databind-2.13.2.2.jar,/Users/renzhi/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.13.2/jackson-annotations-2.13.2.jar,/Users/renzhi/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.13.2/jackson-core-2.13.2.jar,/Users/renzhi/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.13.2/jackson-datatype-jdk8-2.13.2.jar,/Users/renzhi/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.13.2/jackson-datatype-jsr310-2.13.2.jar,/Users/renzhi/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.13.2/jackson-module-parameter-names-2.13.2.jar,/Users/renzhi/.m2/repository/org/springframework/boot/spring-boot-starter-tomcat/2.6.6/spring-boot-starter-tomcat-2.6.6.jar,/Users/renzhi/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/9.0.60/tomcat-embed-core-9.0.60.jar,/Users/renzhi/.m2/repository/org/apache/tomcat/embed/tomcat-embed-el/9.0.60/tomcat-embed-el-9.0.60.jar,/Users/renzhi/.m2/repository/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.60/tomcat-embed-websocket-9.0.60.jar,/Users/renzhi/.m2/repository/org/springframework/spring-web/5.3.18/spring-web-5.3.18.jar,/Users/renzhi/.m2/repository/org/springframework/spring-beans/5.3.18/spring-beans-5.3.18.jar,/Users/renzhi/.m2/repository/org/springframework/spring-webmvc/5.3.18/spring-webmvc-5.3.18.jar,/Users/renzhi/.m2/repository/org/springframework/spring-aop/5.3.18/spring-aop-5.3.18.jar,/Users/renzhi/.m2/repository/org/springframework/spring-context/5.3.18/spring-context-5.3.18.jar,/Users/renzhi/.m2/repository/org/springframework/spring-expression/5.3.18/spring-expression-5.3.18.jar,/Users/renzhi/.m2/repository/org/springframework/boot/spring-boot/2.6.6/spring-boot-2.6.6.jar,/Users/renzhi/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.6.6/spring-boot-autoconfigure-2.6.6.jar,/Users/renzhi/.m2/repository/org/springframework/boot/spring-boot-configuration-processor/2.6.6/spring-boot-configuration-processor-2.6.6.jar,/Users/renzhi/.m2/repository/org/projectlombok/lombok/1.18.22/lombok-1.18.22.jar,/Users/renzhi/.m2/repository/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar,/Users/renzhi/.m2/repository/org/springframework/spring-core/5.3.18/spring-core-5.3.18.jar,/Users/renzhi/.m2/repository/org/springframework/spring-jcl/5.3.18/spring-jcl-5.3.18.jar,/Users/renzhi/gitlab/demo/java-demo/target/java-demo-0.0.1-SNAPSHOT.jar,.]
[正在加载/Users/renzhi/.m2/repository/org/springframework/boot/spring-boot/2.6.6/spring-boot-2.6.6.jar(/org/springframework/boot/SpringApplication.class)]
[正在加载/Users/renzhi/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.6.6/spring-boot-autoconfigure-2.6.6.jar(/org/springframework/boot/autoconfigure/SpringBootApplication.cl]
[正在加载/modules/java.base/java/lang/Object.class]
[正在加载/modules/java.base/java/lang/String.class]
[正在加载/modules/java.base/java/lang/annotation/Target.class]
[正在加载/modules/java.base/java/lang/annotation/ElementType.class]
[正在加载/modules/java.base/java/lang/annotation/Retention.class]
[正在加载/modules/java.base/java/lang/annotation/RetentionPolicy.class]
[正在加载/Users/renzhi/.m2/repository/org/springframework/spring-context/5.3.18/spring-context-5.3.18.jar(/org/springframework/context/annotation/ComponentScan.class)]
[正在加载/Users/renzhi/.m2/repository/org/springframework/spring-context/5.3.18/spring-context-5.3.18.jar(/org/springframework/context/annotation/ComponentScan$Filter.class)]
[正在加载/Users/renzhi/.m2/repository/org/springframework/spring-context/5.3.18/spring-context-5.3.18.jar(/org/springframework/context/annotation/FilterType.class)]
[正在加载/Users/renzhi/.m2/repository/org/springframework/spring-core/5.3.18/spring-core-5.3.18.jar(/org/springframework/core/annotation/AliasFor.class)]
[正在加载/modules/java.base/java/lang/Deprecated.class]
[正在加载/modules/java.base/java/lang/annotation/Annotation.class]
[正在加载/modules/java.base/java/lang/annotation/Repeatable.class]
[正在加载/Users/renzhi/.m2/repository/org/springframework/spring-context/5.3.18/spring-context-5.3.18.jar(/org/springframework/context/annotation/ScopedProxyMode.class)]
[正在加载/modules/java.base/java/lang/Class.class]
循环 1:
输入文件: {com.renzhikeji.demo.api.demoapi.DemoApiApplication, com.renzhikeji.demo.api.demoapi.demo.Test}
注释: [org.springframework.boot.autoconfigure.SpringBootApplication]
最后一个循环: false
[正在加载/modules/java.base/java/util/Collection.class]
[正在加载/modules/java.base/java/util/Map.class]
处理程序lombok.launch.AnnotationProcessorHider$AnnotationProcessor与[/org.springframework.boot.autoconfigure.SpringBootApplication]匹配并返回false。
循环 2:
输入文件: {}
注释: []
最后一个循环: false
处理程序lombok.launch.AnnotationProcessorHider$AnnotationProcessor与[]匹配并返回false。
循环 3:
输入文件: {}
注释: []
最后一个循环: false
处理程序lombok.launch.AnnotationProcessorHider$AnnotationProcessor与[]匹配并返回false。
循环 4:
输入文件: {}
注释: []
最后一个循环: true
[正在检查com.renzhikeji.demo.api.demoapi.DemoApiApplication]
[正在加载/modules/java.base/java/io/Serializable.class]
[正在加载/modules/java.base/java/lang/AutoCloseable.class]
[正在加载/Users/renzhi/.m2/repository/org/springframework/spring-context/5.3.18/spring-context-5.3.18.jar(/org/springframework/context/ConfigurableApplicationContext.class)]
[已写入/Users/renzhi/gitlab/demo/demo-api/target/classes/com/renzhikeji/demo/api/demoapi/DemoApiApplication.class]
[正在检查com.renzhikeji.demo.api.demoapi.demo.Test]
[已写入/Users/renzhi/gitlab/demo/demo-api/target/classes/com/renzhikeji/demo/api/demoapi/demo/Test.class]
[共 594 毫秒]
实际项目中,一直卡在@lombok.Builder.Default注解的类上,去掉此注解,编译不再卡在。而且项目中使用了生成的Builder类。
由于没有跟踪此注解处理器的详细处理流程,不再纠结根本原因,毕竟
lombok在github中出现在issue中的问题确实很多,建议只是使用简单的get、 set方法、构造函数方法等自动生成,其他复杂的代码自动生成不要使用。
总结
Lombok自动代码生成建议酌情使用。在遇到编译问题,我们学会调整maven编译器选项,看到详情的处理流程。
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<useIncrementalCompilation>false</useIncrementalCompilation>
<showWarnings>true</showWarnings>
<debuglevel>lines,vars,source</debuglevel>
</configuration>
</plugin>
</plugins>
</build>