@levinzhang
2023-04-02T10:27:55.000000Z
字数 6852
阅读 377
by
本期的Java新闻汇总所涉及的新闻包括OpenJDK、JDK 20、JDK 21、Amazon Corretto 20、BellSoft Liberica JDK 20、多个Spring里程碑和小版本发布、Quarkus 3.0.0.Beta1和2.16.5、Helidon 3.2.0、Open Liberty 23.0.0.3-beta、Micronaut 4.0.0-M1、Camel Quarkus 3.0.0-M1、JBang 0.105.1、Failsafe 3.3.1、Maven 3.9.1以及Gradle 8.1-RC1。
本期的Java新闻汇总所涉及的新闻包括OpenJDK、JDK 20、JDK 21、Amazon Corretto 20、BellSoft Liberica JDK 20、多个Spring里程碑和小版本发布、Quarkus 3.0.0.Beta1和2.16.5、Helidon 3.2.0、Open Liberty 23.0.0.3-beta、Micronaut 4.0.0-M1、Camel Quarkus 3.0.0-M1、JBang 0.105.1、Failsafe 3.3.1、Maven 3.9.1以及Gradle 8.1-RC1。
JEP 431,序列集合(Sequenced Collections),在JDK 21中已经从Proposed to Target状态提升到了Targeted状态。该JEP提议引入“一个新的接口系列,代表了元素能够以明确的序列或顺序排列在集合中的概念,使其作为集合的结构化属性”。该JEP的动机在于集合框架(Collections Framework)中缺乏定义良好的排序和统一操作集。关于JEP 431的更多信息,请参阅InfoQ的新闻报道。
JEP 443,未命名的模式和变量(Unnamed Patterns and Variables,预览)已经从JEP Draft 8294349状态提升到了Candidate状态。该预览JEP提议“使用未命名模式和未命名参数对语言进行增强,未命名模式与record组件匹配,但不用说明组件的名称或类型,未命名参数可以被初始化但不使用”。这两种模式都是由下划线来进行表示的,如r instanceof _(int x, int y)
和r instanceof _
。
甲骨文发布了Java编程语言和虚拟机的20版本。更多细节请参阅InfoQ的新闻报道。
JDK 21的早期访问构建版本Build 15发布,它是对Build 14的更新,包含对各种问题的修复。关于该版本的更多细节,可以参见发布说明。
对于JDK 20和JDK 21,鼓励开发人员通过Java Bug数据库报告缺陷。
亚马逊云科技发布了Amazon Corretto 20,这是他们的OpenJDK 20的下游发行版,可用于Linux、Windows和macOS。开发人员可以从该网站下载这个最新版本。
与之类似,BellSoft也发布了Liberica JDK 20,这是他们的OpenJDK 20的下游发行版。开发者可以从该网站下载这个最新版本。
对于Spring项目团队来说,最近是非常忙碌的,他们发布了Spring Boot、Spring Framework、Spring Data、Spring Integration、Spring Vault、Spring for GraphQL、Spring Authorization Server、Spring HATEOAS和Spring Modulith的里程碑版本以及小版本。其中一些版本解决了公共漏洞和暴露(Common Vulnerabilities and Exposure,CVE):
Spring Boot 3.0.5发布,该版本带来了文档改进、依赖性升级和重要的缺陷修复,比如,当嵌入式服务器未配置时,EmbeddedWebServerFactoryCustomizerAutoConfiguration类不应该被调用;@ConfigurationProperties注解不再用于可变的Kotlin数据类;使用@EntityScan注解导致AOT实例供应者出现代码生成错误。关于该版本的更多细节,请参阅发布说明。
与之类似,Spring Boot 2.7.10发布,该版本带来了文档改进、依赖性升级和重要的缺陷修复,比如,在使用SnakeYAML 2.0时,加载application.yml
文件会出现NoSuchMethodError异常;如果classpath包含“.
”字符,StandardConfigDataResource类的实例可能会导入同一个文件两次;在使用project.build.outputTimestamp
属性时,一个Maven插件使用了本地时区的时间戳。关于该版本的更多细节,请参阅发布说明。
Spring Boot 3.1.0的第二个发布候选版本提供了一些新的特性,比如,SanitizableData类的新方法withSanitizedValue()
,它会返回一个脱敏(sanitized)值的新实例;支持GraphQL分页和排序的默认配置;支持Spring Authorization Server。关于该版本的更多细节,请参阅发布说明。
Spring Framework的6.0.7和5.3.26版本发布,主要解决上述的CVE-2023-20860和CVE-2023-20861漏洞。这两个版本还提供了新的特性,比如,在SpEL中改进了对matches
运算符和重复文本的诊断;更新了HandlerMappingIntrospector类;允许兼容SnakeYaml 2.0运行时。关于这两个版本的更多细节,请分别参阅6.0.7版本和5.3.26版本的发布说明。
Spring Framework 5.2.23的发布也解决了CVE-2023-20861漏洞,并提供了与Spring Framework 5.3.26相同的新SpEL特性。关于这个版本的更多细节,请参阅发布说明。
Spring Data的2023.0-M1(代号为Ullman)、2022.0.4和2021.2.10发布。这些服务版本包含了缺陷修复和文档改进,分别可用于Spring Boot 3.0.5和2.7.10。里程碑版本中的新特性包括,新的滚动API,支持偏移和基于key的分页;改进对HQL和JPQL的JPA查询解析;支持MongoDB的显式字段级加密;Spring Data REST中的聚合引用请求参数。关于该里程碑版本的更多细节,请参阅发布说明。
Spring Integration的6.1.0-M2、6.0.4和5.5.17版本发布,带来了重要的变更,包括,LockRegistryLeaderInitiator类的改进,如在当前线程被中断的情况下,调用目标锁提供者将会被延迟;AbstractRemoteFileStreamingMessageSource类在远程调用方面的改进;修复与代码覆盖工具Sonar和JaCoCo的关系。关于这些版本的更多细节,请参阅6.1.0-M2、6.0.4和5.5.17的发布说明。
Spring Vault的3.0.2和2.3.3版本发布,以解决上述的CVE-2023-20859漏洞,并带来了新的特性,如完善令牌撤销失败后的日志记录;在ClientHttpRequestFactoryFactory和ClientHttpConnectorFactory类中重用来自库的特定配置代码;在EnvironmentVaultConfiguration类中添加AWS IAM Authentication功能。关于这两个版本的更多细节,请参阅3.0.2 and 2.3.3的发布说明。
Spring for GraphQL 1.2.0的第一个里程碑版本发布,提供了新的特性,包括,在@SchemaMapping注解标注的方法中支持分页返回值和分页请求;支持HandlerMethodArgumentResolver接口的自定义实例;依赖升级到GraphQL Java 20.0。关于该版本的更多细节,请参阅发布说明。
Spring for GraphQL的1.1.3和1.0.4版本发布,其中包含了新的特性,WebGraphQlInterceptor接口中的访问请求属性和cookie;ContextDataFetcherDecorator类的实例在名称变更时忽略订阅的修复。这些版本分别可用于Spring Boot 3.0.5和2.7.10。关于这两个版本的更多细节,请参阅1.1.3和1.0.4的发布说明。
Spring Authorization Server 1.1.0的第二个里程碑版本包含了缺陷修正、依赖性升级和新特性,如RFC 8628,OAuth 2.0设备授权(Device Authorization Grant)的实现;为OAuth2客户端secret启用PasswordEncoder接口中定义的upgradeEncoding()
方法。关于该版本的更多细节,请参阅发布说明。
Spring HATEOAS的2.1-M1、2.0.3和1.5.4版本发布。这些服务版本包括了文档改进和依赖性升级。里程碑版本包含如下特性,支持在表单上使用JSR-303定义的@Size注解的属性元数据;添加新的SlicedModel类,这是PagedModel类的简化版本,可以浏览切片,但不计算总数。关于这些版本的更多细节,请参阅2.1-M1、version 2.0.3和version 1.5.4的发布说明。
Spring Modulith 0.5.1的发布提供了一个重要的缺陷修正,即spring-modulith-runtime
模块意外地包含了一个只用于测试的Logback配置文件。此外,还有一个依赖性升级到Spring Boot 3.0.5。关于这个版本的更多细节,请参阅发布说明。
Spring Data JPA团队为开发者引入了HQL和JPQL查询解析器,以便在Spring Data JPA应用程序中结合@Query
注解更容易地定制查询。
Quarkus 3.0.0的第一个beta版本包含对管理接口的支持,该接口能够将选定的路由(即管理路由)暴露到不同的HTTP服务器上,避免在主HTTP服务器上暴露这些路由,之前的方式可能会导致对这些端点的泄漏和预料之外的访问。关于这个版本的更多细节,请参阅更新日志。
Quarkus 2.16.5.Final是第五个维护版本,重要的变更包括,过滤掉执行测试类ProviderConfigInjectionWarningsTest时与RESTEasy相关的警告;修复加载工作区模块时的NullPointerException
;防止来自MessageBodyWriter的服务器端事件可能会写入一个不断累积的头信息中。关于这个版本的更多细节,请参阅更新日志。
甲骨文发布了Helidon 3.2.0,其中的变更包括,对WriteableMultiPart类中定义的重载create()
方法的修复;对JtaConnection类中关闭数据库连接的错误行为的修复;对SnakeYAML 2.0的依赖升级。值得注意的是,在SnakeYAML 2.0中存在着破坏性的变更。如果直接使用SnakeYAML,Helidon应用程序可能会受到影响。然而,依然可以使用降级的SnakeYAML 1.3.2将应用程序升级到Helidon 3.2.0。关于这个版本的更多细节,请参阅发布说明。
IBM发布了Open Liberty 23.0.0.3-beta,支持JDK 20、Jakarta EE 10 Platform和MicroProfile 6.0。
Micronaut基金会提供了第一个里程碑版本的Micronaut Framework 4.0.0,其特性包括,对Kotlin符号处理(Kotlin Symbol Processing)的实验性支持;对虚拟线程的支持;改进了缺失Bean的错误信息;对过滤器方法的支持。
正如Apache Tomcat团队所披露的,CVE-2023-28708,这是使用RemoteIpFilter类的一个安全漏洞,在通过HTTP接收到的、X-Forwarded-Proto头信息设置为HTTPS的反向代理请求时,Tomcat创建的会话cookie不包括secure
属性。这一漏洞可能导致攻击者通过不安全的通道传输会话cookie。受此漏洞影响的Tomcat版本包括: 11.0.0-M1至11.0.0-M2、10.1.0-M1至10.1.5、9.0.0-M1至9.0.71以及8.5.0至8.5.85。
Camel Quarkus 3.0.0的第一个里程碑版本,包含Quarkus 3.0.0.Alpha5和Camel 4.0.0-M2,它是以JDK 17和Jakarta EE 10为基线的第一个Camel Quarkus版本。其他值得注意的变化包括,废弃了ReflectiveClassBuildItem类;修复了在用Camel 4和Quarkus 3测试时使用PerfRegressionIT类抛出的异常;将Infinispan测试拆分成分别由Quarkus和Camel管理的客户端独立模块。关于这个版本的更多细节,请参阅发布说明。
0.105.1和0.105.2版本的JBang带来了重要的变更,包括,改进的jbang edit
编辑命令,它假定支持的JBang IDE插件之一已被安装;基于modulepath进行持续改进,以替换classpath;jbang export jlink
命令现在是一个选项,允许开发人员导出一个嵌入Java运行时的JBang应用程序或脚本;对Apple Silicon VSCodium下载的修正。
Failsafe是一个在Java 8+环境中处理故障的轻量级、零依赖性的库,它发布了3.3.1版本,其特性是API的变更,比如,在Failsafe JAR中增加了完整的Java模块描述符;发布了Failsafe提供的CompletableFuture类实例内部的执行引用。有关该版本的更多细节,请参阅更新日志。
Maven 3.9.1发布,改善之处包括,改进了“missing dependency”的错误信息;使用replace()方法替换replaceAll()方法中的所有非正则表达式模式,或使用预编译模式来提高性能;废弃Mojo插件的参数表达式${localRepository}
,因为${localRepository}
注入的ArtifactFactory接口实例由于缺乏上下文,与Maven解析器接口LocalRepositoryManager不兼容。
Gradle 8.1的第一个候选版本发布,该版本提供了如下特性,配置缓存的持续改进,现在可以认为它业已稳定;Kotlin DSL的持续改进,这是Groovy DSL的替代方案,包括Kotlin DSL脚本中的实验性简单属性设置;对JDK 20的支持。关于这个版本的更多细节,请参阅发布说明。
查看英文原文:Java News Roundup: JDK 20 Released, Spring Releases, Quarkus, Helidon, Micronaut, Open Liberty