Java editions: SE, EE, ME and Jakarta EE
In short: Java comes in several “editions” for different purposes: SE (Standard Edition) for normal programs, EE (Enterprise Edition, today Jakarta EE) for large server applications and ME (Micro Edition) for small devices.
In more detail: All editions use the same language and the same virtual machine. They differ in the bundled libraries (APIs). SE is the foundation; EE and ME build on it or restrict it.
In Depth
| Edition | Purpose | Examples |
|---|---|---|
| Java SE | Desktop, command-line and server programs, language core | Collections, I/O, threads, streams, networking |
| Jakarta EE (formerly Java EE) | Enterprise web applications | Servlets, JPA (databases), CDI, REST (JAX-RS), transactions |
| Java ME | Embedded devices, old phones, sensors | Heavily reduced library |
- Renaming: Oracle handed Java EE to the Eclipse Foundation in 2017. For legal reasons it has been called Jakarta EE since version 9. The packages changed from
javax.*tojakarta.*. This breaks old code, which must be adapted on update. - Specification and implementation: Jakarta EE is only a description. It is implemented by application servers such as WildFly, Payara, Open Liberty, or by servlet containers such as Tomcat.
- Spring: The popular Spring framework is not an EE edition but uses many of the same concepts. Spring Boot 3 builds on
jakarta.*. - ME today: Hardly matters anymore. Android uses its own libraries, and embedded devices use Java SE Embedded, GraalVM or other languages.
- Which do I need? For learning and for most programs, the JDK (SE) is enough.
See also: JDK, JRE (Java Runtime Environment), Packages/API