常见问题
格式化异常
java.lang.UnsupportedClassVersionError: io/spring/javaformat/eclipse/jdt/jdk11/internal/formatter/DefaultCodeFormatter
has been compiled by a more recent version of the Java Runtime (class file version 55.0),
this version of the Java Runtime only recognizes class file versions up to 52.0
由于 spring-javaformat 组件的升级,现在如果在 jdk8 环境下,请在项目跟目录新建一个名为 .springjavaformatconfig
的文件。
文件内容如下:
java-baseline=8
项目启动报错(一)
输出如下异常信息:
nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
检查是否在 jdk11 及以上版本运行项目,是的话需要添加以下依赖:
<!-- API, java.xml.bind module -->
<!-- add it when jdk11 -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.2</version>
</dependency>
项目启动报错(二)
抛出如下异常:
[main] ERROR org.springframework.boot.SpringApplication - Application run failed
org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token
found character '@' that cannot start any token. (Do not use @ for indentation)
in 'reader', line 8, column 11:
name: @artifactId@
^
at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:439)
at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:248)
at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingValue.produce(ParserImpl.java:665)
at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:165)
at org.yaml.snakeyaml.comments.CommentEventsCollector$1.peek(CommentEventsCollector.java:59)
根本原因: maven 编译文件时 yml 中的占位符没有被替换成功。
情况一: idea 抽风,没有正常处理 maven 配置
删除项目 build 生产的 target 文件夹,maven reimport 项目后再重新启动
情况二:没有勾选 maven profile
导致无法正确进行 @artifactId@
值替换,按图勾选对应的 profile 并重新 reimport 项目,再进行启动。 如果 pom 的 parent 不是 ballcat,请检查是否有对应的 <profiles>
配置
情况三:没有正确配置 maven 的 resource 资源过滤器
检查在项目 pom.xml 中是否添加对应的 <resources>
配置,配置方式参看: Maven 占位符配置