在使用Java 10开发Spring Boot 2.0应用程序时,需要注意以下基本要点

总述

这是一个关于在Spring Initializr生成的Spring Boot 2.0应用程序模板中,为了编译和运行需要在Java 10环境配置等方面的笔记。

由于这是基于模板的,所以本文只涵盖了基础内容。对于复杂的产品应用程序,可能会有更多注意事项的出现。

环境

    • Windows 10 Professional

 

    • Oracle JDK 10.0.1

 

    • Spring Boot 2.0.2

 

    Maven 3.5.3

Java (an object-oriented programming language) can be paraphrased in Chinese as:

Java(一种面向对象的编程语言)

> java -version
java version "10.0.1" 2018-04-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)

Maven是一个自动化构建工具。

> mvn.cmd -version
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T04:49:05+09:00)
Maven home: D:\dev\apache-maven-3.5.3\bin\..
Java version: 10.0.1, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk-10.0.1
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

请提供更具体的句子或上下文,以便我能够为您提供合适的翻译。

    • Spring Boot with Java 9 and above

 

    • dsyer/spring-boot-java-9

 

    • Java Development Kit 10 Release Notes

 

    ヌーラボのアカウント基盤を Java 9 にマイグレーションして起きた問題と解決法 | ヌーラボ

关于Spring Boot对Java 10的支持

首先,关于使用Spring Boot 2.0开发的应用程序能否在Java 10上运行的问题,正如Spring Boot与Java 9及以上版本的需求所述,Spring Boot 2.0.1支持在Java 10上的运行。

要求
Spring Boot 2 是第一个支持 Java 9 的版本(也支持 Java 8)。如果您正在使用 1.5 版本并希望使用 Java 9,则应该升级到 2.0 版本,因为我们没有计划在 Spring Boot 1.5.x 上支持 Java 9。
Spring Boot 2.0.1.RELEASE 版本已经支持 Java 10。我们打算在 Spring Boot 2.1.x 版本开始支持 Java 11。

使用Java 10需要注意的事项

Java 10(以及9)中有一些在Java 1.8中不需要注意的事项。

非法的反射访问

当启动应用程序时,启动日志会输出以下警告信息。
这个问题从Java 9开始出现,但在Java 10中仍然存在。

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

由于Spring Framework使用了反射,所以这个警告是预期中的(不是不正当的)。此外,似乎将来会有改进(用于CGLIB类定义目的的MethodHandles.Lookup.defineClass)。
如果只是想抑制警告输出,可以将以下选项添加到JVM选项中。

--illegal-access=deny

在jar文件执行时

> java --illegal-access=deny -jar demo.jar

JAXB是一个Java技术,用于将Java对象与XML数据进行互相转换的框架。

在使用JPA (Hibernate)进行项目开发时,需要在依赖关系中添加JAXB。

在中国原生的中文中,以下是对该句子的一个选项的释义:
通常,Hibernate需要JAXB,而JAXB不再默认提供。

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
</dependency>

使用Lombok指定版本

如果使用Spring Boot 2.0.2的依赖关系管理,默认会使用lombok 1.16.20,但如果使用Java 10,则需要指定lombok 1.16.22(截至2018年6月)。

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
    <version>1.16.22</version>
</dependency>

根据这里的PR(更新Lombok到1.18.0),虽然2018年6月5日发布了Lombok 1.18.0(changelog),但是Spring Boot似乎只从Spring Boot 2.1开始正式采用。

顺便说一句,有一个名为”考虑从Spring Boot的依赖管理中移除lombok”的问题,我们正在考虑是否要移除lombok。也许在将来的版本中,如果要使用lombok,可能需要明确指定版本。

无需降级 maven-surefire-plugin。

由于问题已在2.21.0版本中得到解决,所以在Java 9中无需将maven-surefire-plugin降级到2.20.0版本。
另外,由于Spring Boot 2.0.2默认使用2.21.0版本,因此无需显式指定版本。

Java 9对Spring Boot的过时维基参考

与Java 9和10相关的正在进行的问题

这是截至2018年6月的状态。

Support Devtools with Java 9+ modulepath (Backlog)
Support Java 9 Multi-Release JAR files

Upgrade to a Cassandra version that works with Java 9

Cassandraの対応待ちです。

SpringBootTest does not work with Java 10/modules
(external-project)

Spring Bootの課題としてはClosedになっていますが、引き続きSpring Frameworkの課題として扱われています。

关于Java 11的支持

春季框架

Spring Framework将在5.1 GA版本中得到支持。

[SPR-16391] 与 JDK 11 的兼容性

2018年9月21日,Spring Framework 5.1 GA发布。
正如公告所述,这个版本正式支持Java 11。

春季框架5.1正式发布。

Spring Framework 5.1需要JDK 8或更高版本,并具体支持作为下一个长期支持版本的JDK 11。它带有与GraalVM兼容性的初始改进,并与最近发布的Reactor Californium和Hibernate ORM 5.3深度集成。

春天启动

从Spring Boot 2.1.0 M4版本开始,支持Spring Framework 5.1 GA。

填补

依存关系管理支持的现状

为了避免在Google搜索等平台上产生干扰,我们将大多数库和框架的名称放在了另外一个限定共享页面上。

以下是Spring Boot依赖管理在Java 10上的支持情况的翻译。

OpenJDK 9和10的错误。

    Java9、10でStringの+=に副作用があるバグ – きしだのはてな

Java 11中将被移除的模块

JEP 320决定了以下模块将在Java 11中被删除。

    • java.xml.ws

 

    • java.xml.bind

 

    • java.activation

 

    • java.xml.ws.annotation

 

    • java.corba

 

    java.transaction

如果应用程序仍然需要这些模块,可以通过添加额外的依赖关系来使用它们(不包括CORBA),具体如下所示。

JAX WS RI 独立压缩捆绑包。

<!-- https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-ri -->
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-ri</artifactId>
    <version>2.3.0.1</version>
    <type>pom</type>
</dependency>

JAXB API 可以被翻译为:Java 架构描述语言 API

<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>

JavaBeans激活框架

<!-- https://mvnrepository.com/artifact/com.sun.activation/javax.activation -->
<dependency>
    <groupId>com.sun.activation</groupId>
    <artifactId>javax.activation</artifactId>
    <version>1.2.0</version>
</dependency>

Javax注释API

<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

Java事务API

<!-- https://mvnrepository.com/artifact/javax.transaction/javax.transaction-api -->
<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>javax.transaction-api</artifactId>
    <version>1.3</version>
</dependency>

CORBA (Common Object Request Broker Architecture) is a platform-independent, distributed computing infrastructure that enables different systems and programming languages to communicate with each other seamlessly.

除非第三方接管CORBA API、ORB实现、CosNaming提供者等的维护工作,否则将不会有独立版本的CORBA。

目前(2018年6月),似乎没有CORBA的独立版本。

广告
将在 10 秒后关闭
bannerAds