Java 9 发布至今已经有半年之久, Spring Boot 对其的支持进度也快接近完成, 本文就来整理一下在 Java 9 上运行 Spring Boot 的一些要点
必须使用 Spring Boot 2.0
在 Spring Boot 的版本计划中明确说明了 2.0 版本开始才对 Java 9 进行支持, 而 1.x 版本暂时没有对 Java 9 的支持计划, 所以如果我们要使用 Java 9, 就必须将 Spring Boot 版本升级至 2.0
细节注意点
AspectJ
在 Java9 中要使用 JDK 的编译织入切面时, 我们需要引入 AspectJ 1.9, 但是这个版本还处于 RC 状态, 并不是正式版本, 所以当 Spring Boot 2 会在 Aspect 1.9 GA 的时候更新这个版本依赖
JAXB
如果使用 Hibernate 的情况下, 由于依赖 JAXB, 这个时候可能会碰到这个错误:
java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
, 面对这个问题, 只需要引入如下依赖就可以解决:
- <dependency>
- <groupId>javax.xml.bind</groupId>
- <artifactId>jaxb-api</artifactId>
- <version>2.3.0</version>
- </dependency>
测试插件
最新的
maven-surefire-plugin
插件 (2.20.1 版本) 需要手工指定一个模块以防止包含 java.se.ee:
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <argLine>--add-modules java.base</argLine>
- </configuration>
- </plugin>
或者也可以指定降级到 2.20.0 版本
一些暂不支持的类库
Apache Cassandra, 具体可见:#10453
JSP TLDs 在嵌入式 Tomcat 中不生效, 具体可见:#10456
参考资料
Running Spring Boot on Java 9
来源: http://www.jianshu.com/p/bbc079a6f3b2