Автор оригинала: mkyong.
Использование Jersey 3x + Jetty для разработки конечных точек, но при запуске приложения возникает следующая ошибка.
Exception in thread "main" java.lang.NoClassDefFoundError: jakarta/servlet/ServletInputStream at org.glassfish.jersey.jetty.JettyHttpContainerProvider.createContainer(JettyHttpContainerProvider.java:43) at org.glassfish.jersey.server.ContainerFactory.createContainer(ContainerFactory.java:58) at org.glassfish.jersey.jetty.JettyHttpContainerFactory.createServer(JettyHttpContainerFactory.java:110) at com.mkyong.MainApp.startServer(MainApp.java:22) at com.mkyong.MainApp.main(MainApp.java:32) Caused by: java.lang.ClassNotFoundException: jakarta.servlet.ServletInputStream at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 5 more
1. джакарта/сервлет/* и API сервлетов 5.0
Начиная с Servlet API 5.0 , API переместился из пакета javax.servlet
в jakarta.servlet
.
Ниже приведена краткая история API сервлетов
API перенесен из пакета javax.servlet в jakarta.servlet | 12 июня 2020 года | Джакарта EE 9 | Сервлет 5.0 |
Переименован из торговой марки “Java”, пакет API все еще javax.сервлет | 13 августа 2019 года | Джакарта EE 8 | Сервлет 4.0.3 |
все еще javax.сервлет | Сентябрь 2017 | Java EE 8 | Сервлет 4.0 |
все еще javax.сервлет | Май 2013 года | Java EE 7 | Сервлет 3.1 |
2. Решение
Некоторые библиотеки зависят от API сервлета 5.0
, который не может быть найден в зависимости проекта. Мы можем исправить это, включив следующее jakarta.servlet-api@5.0.0
:
jakarta.servlet jakarta.servlet-api 5.0.0
3. Рекомендации
- Википедия – Джакарта Сервлет
- Джакартский сервлет 5.0
- Примеры HTTP-серверов Джерси и Джетти
Оригинал: “https://mkyong.com/java/java-lang-noclassdeffounderror-jakarta-servlet-servletinputstream/”