如果你希望使用 Java 9 运行 Spring Boot 应用程序,这篇文章将会对你有所帮助。
注意:问题跟踪器包含了所有未解决的关于 Java 9 的已知问题,所以在报告新问题前,请查看该列表。
Spring Boot 2.0 是首个支持 Java 9 的版本(同时支持 Java 8)。如果你正在你使用 1.5.0 并希望使用 Java 9,你应该升级到 2.0 版本,官方表示目前 没有计划 在 Spring Boot 1.5.x 系列上支持 Java 9。
使用 Java 9,如果你需要编译 JDK 中的类,则需要使用 AspectJ 1.9(目前处于 RC 阶段)。这是一个临时的解决方案,因为 Aspect 1.9 GA 即将推出,而且 Spring Boot 也将升级到该版本。在大多数情况下,使用 AspectJ 1.8(Spring Boot snapshot 中的默认版本),Spring AOP 也能正常运行。
升级时可能会遇到以下情况:
java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
Hibernate 通常需要的 JAXB 不再默认提供。你需要为你的项目添加以下依赖:
<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </dependency>
或者你可以添加 java.xml.bind 模块以使用 Java 9 恢复该功能。
使用 Java 9 进行测试时,最新的 maven-surefire-plugin 版本(2.20.1) 引入了回归错误 ,你可以降级到 2.20.0,或显式添加一个模块以防止引入 java.se.ee:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>--add-modules java.base</argLine> </configuration> </plugin>
下面这些库尚未完全支持 Java 9:
Apache Cassandra,详情请查看 #10453
除非以打包的 war 形式运行,否则 JSP TLD 会附带有嵌入式的 Tomcat,详情请查看 #10456