概述

在升级Spring Boot到3.0版本以后,或升级Spring到6.0版本以上,会发现应用编译失败或启动失败等问题。

经过排查不难得知,Spring 6或Spring Boot 3(实际上依赖于Spring 6)不再支持javax.开头的一系列依赖包,需要改成jakarta.开头的一系列包。

当然编译失败或启动失败,还有其他原因,如:部分API不再是@deprecated而是直接被removed等。另外,Spring Boot 3依赖的JDK最低版本是17。

升级

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>
</dependency>

Jakarta项目介绍_java


根据maven的提示做如下升级:

<dependency>
	<groupId>jakarta.servlet</groupId>
	<artifactId>jakarta.servlet-api</artifactId>
	<version>6.0.0</version>
	<scope>provided</scope>
</dependency>

在代码层面,import javax.*替换为import jakarta.*

如果你在使用IDEA(什么?还有Javaer不用IDEA),借助于IDEA(2021.2+版本)提供的功能:

Jakarta项目介绍_java_02


几乎可以一键完成依赖升级。

javax vs jakarta

在Java生态系统中,最初javax是一个缩写,代表Java Extension。javax作为包名,包含一系列的Java扩展(补充)包,提供各种不同的功能,如Servlet、JDBC、JMS等。这些扩展包通常是Java标准库之外的库,需要单独下载和安装,可帮助Java开发人员完成各种任务。

Jakarta EE

Jakarta EE并不是什么新技术,其前身即是Java EE,再往前就是J2EE。

Jakarta EE 9概览

Jakarta项目介绍_Java_03


Jakarta EE 9专注于迁移到新的命名空间并清除一些无谓的规范。Jakarta EE10概览

Jakarta项目介绍_java_04


Jakarta EE 10包括12个具有主要版本更新的组件规范和12个具有次要版本更新的组件规范。

随Jakarta EE 10发布的Core Profile 10,是 Jakarta EE Technologies 的子集,针对微服务和云开发运行时。 从MicroProfile发展而来的。

Core Profile 10中包含的Jakarta EE组件规范的关键子集:

  • 注释 2.1
  • 上下文和依赖注入 (CDI) Lite 4.0
  • 依赖注入 2.0
  • 表达语言 5.0
  • 拦截器 2.0
  • JSON-B 3.0
  • JSON-P 2.1
  • RESTful Web 服务 3.1

jakarta依赖

jakarta提供的依赖:

  • jakarta.servlet-api:学习Java Web开发,绕不过Servlet。Spring Boot基于Spring,基于Spring MVC,底层很多概念都是Servlet。
  • jakarta.servlet.jsp.jstl-api:
  • jakarta.servlet.jsp-api
  • jakarta.batch-api:提供基于XML的作业规范语言(Job Specification Language, JSL),允许以XML形式定义和执行批处理作业。
  • jakarta.persistence-api:提供Java持久化API的实现,允许开发人员将Java对象映射到关系数据库中。
  • jakarta.jms-api:Java消息服务应用程序接口是一个Java平台中关于面向消息中间件的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
  • jakarta.xml.ws-api:
  • jakarta.ws.rs-api:
  • jakarta.xml.bind-api:提供实体类和XML文档来回转换的API
  • jakarta.json-api:用于解析、生成、转换和查询JSON文档。
  • jakarta.json.bind-api:提供实体类和JSON文档来回转换的API
  • jakarta.jakartaee-api:
  • jakarta.mail-api:提供平台无关和协议无关的邮件收发抽象类
  • jakarta.validation-api:
  • jakarta.activation-api:
  • jakarta.transaction-api:
  • jakarta.inject-api:
  • jakarta.el-api:
  • jakarta.enterprise.cdi-api:
  • jakarta.annotation-api:

附当前最新版Maven GAV:

<dependency>
	<groupId>jakarta.servlet</groupId>
	<artifactId>jakarta.servlet-api</artifactId>
	<version>6.0.0</version>
	<scope>provided</scope>
</dependency>
<dependency>
	<groupId>jakarta.servlet.jsp.jstl</groupId>
	<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
	<version>3.0.0</version>
</dependency>
<dependency>
	<groupId>jakarta.servlet.jsp</groupId>
	<artifactId>jakarta.servlet.jsp-api</artifactId>
	<version>3.1.1</version>
	<scope>provided</scope>
</dependency>
<dependency>
	<groupId>jakarta.batch</groupId>
	<artifactId>jakarta.batch-api</artifactId>
	<version>2.1.1</version>
</dependency>
<dependency>
	<groupId>jakarta.json</groupId>
	<artifactId>jakarta.json-api</artifactId>
	<version>2.1.3</version>
</dependency>
<dependency>
	<groupId>jakarta.persistence</groupId>
	<artifactId>jakarta.persistence-api</artifactId>
	<version>3.1.0</version>
</dependency>
<dependency>
	<groupId>jakarta.jms</groupId>
	<artifactId>jakarta.jms-api</artifactId>
	<version>3.1.0</version>
</dependency>
<dependency>
	<groupId>jakarta.xml.ws</groupId>
	<artifactId>jakarta.xml.ws-api</artifactId>
	<version>4.0.0</version>
</dependency>
<dependency>
	<groupId>jakarta.ws.rs</groupId>
	<artifactId>jakarta.ws.rs-api</artifactId>
	<version>3.1.0</version>
</dependency>
<dependency>
	<groupId>jakarta.xml.bind</groupId>
	<artifactId>jakarta.xml.bind-api</artifactId>
	<version>4.0.2</version>
</dependency>
<dependency>
	<groupId>jakarta.json.bind</groupId>
	<artifactId>jakarta.json.bind-api</artifactId>
	<version>3.0.0</version>
</dependency>
<dependency>
	<groupId>jakarta.platform</groupId>
	<artifactId>jakarta.jakartaee-api</artifactId>
	<version>10.0.0</version>
	<scope>provided</scope>
</dependency>
<dependency>
	<groupId>jakarta.mail</groupId>
	<artifactId>jakarta.mail-api</artifactId>
	<version>2.1.3</version>
</dependency>
<dependency>
	<groupId>jakarta.validation</groupId>
	<artifactId>jakarta.validation-api</artifactId>
	<version>3.0.2</version>
</dependency>
<dependency>
	<groupId>jakarta.activation</groupId>
	<artifactId>jakarta.activation-api</artifactId>
	<version>2.1.3</version>
</dependency>
<dependency>
	<groupId>jakarta.transaction</groupId>
	<artifactId>jakarta.transaction-api</artifactId>
	<version>2.0.1</version>
</dependency>
<dependency>
	<groupId>jakarta.inject</groupId>
	<artifactId>jakarta.inject-api</artifactId>
	<version>2.0.1</version>
</dependency>
<dependency>
	<groupId>jakarta.el</groupId>
	<artifactId>jakarta.el-api</artifactId>
	<version>5.0.1</version>
</dependency>
<dependency>
	<groupId>jakarta.enterprise</groupId>
	<artifactId>jakarta.enterprise.cdi-api</artifactId>
	<version>4.0.1</version>
</dependency>
<dependency>
    <groupId>jakarta.annotation</groupId>
    <artifactId>jakarta.annotation-api</artifactId>
    <version>2.1.1</version>
</dependency>

拓展

jakarta项目

jakarta项目所包括的相关工具、库以及框架等罗列如下:

  • BCEL:处理Java字节码的类库
  • BSF:脚本程序框架
  • Cactus:服务器端Java类测试工具框架
  • ECS:The Element Construction Set is a Java API for generating elements for various markup anguages
  • HttpComponents:The Hyper-Text Transfer Protocol.
  • JCS:a distributed caching system written in java.
  • JMeter:压力测试工具
  • ORO:Java classes that provide Perl5 compatible regular expressions.
  • Regexp:纯Java正则表达式包
  • Slide:a content repository primarily using WebDAV.
  • Taglibs:Repository for JSP custom tag libraries

单独项目

最开始,所有关于Java的项目,都集中在Apache的Jakarta项目之下,作为子项目存在,这时的Tomcat称为Jakarta Tomcat。后来,Jakarta下面项目太多,就开始分家,如Ant、Tomcat等,故而现在称Apache Tomcat。

以前隶属于雅加达项目,但现在作为Aapche软件基金的单独项目:

  • Ant:在Maven出现之前特别流行的构建工具
  • Commons:一组使用类的合集,主要作为Java标准库的补充
  • HiveMind:a services and configuration microkernel
  • Maven:a project build and management tool
  • POI:a pure Java port of Microsoft’s popular file formats.
  • Struts:很多大龄程序员肯定对这个很熟悉,一个Web应用开发框架。大概十多年前,非常流行的Web开发框架SSH=Struts+Spring+Hibernate。后来流行的SSM=Spring-MVC+Spring+MyBatis。
    Tapestry:A component object model based on JavaBeans properties and strong specifications
  • Tomcat:服务器,提供JSP/Servlet相关容器类
  • Turbine:a rapid development web application framework
  • Velocity:a template engine

参考

  • 什么是Jakarta EE