运行jetty时出现错误NoClassDefFoundError



我尝试在jar可执行文件中创建一个jetty服务器我有maven 3.6.0和OpenJdk 11.0.4

我的第一次运行失败,当我启动代码时收到以下错误:

线程"main"java.lang.NoClassDefFoundError:javax/servlet/http/HttpServletResponse中的异常在com.my.test.Main.Main(Main.java:13(引起原因:java.lang.ClassNotFoundException:javax.servlet.http.HttpServlet响应位于java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583(位于java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178(位于java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521(…还有1个

代码:

import java.net.URL;
import java.security.ProtectionDomain;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
public class Main {
public static void main(String[] args) throws Exception {
int port = Integer.parseInt(System.getProperty("port", "8080"));
Server server = new Server(port);
ProtectionDomain domain = Main.class.getProtectionDomain();
URL location = domain.getCodeSource().getLocation();
WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/");
webapp.setDescriptor(location.toExternalForm() + "/WEB-INF/web.xml");
webapp.setServer(server);
webapp.setWar(location.toExternalForm());
server.setHandler(webapp);
server.start();
server.join();
}
}

pom.xml依赖项:

<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.4.22.v20191022</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>9.4.22.v20191022</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>9.4.22.v20191022</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-plus</artifactId>
<version>9.4.22.v20191022</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>${version.jetty}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>apache-jsp</artifactId>
<version>${version.jetty}</version>
</dependency>
</dependencies>
</project>

我不明白发生了什么事,有人能帮忙吗?

提前谢谢。

如果您正在执行嵌入式jetty,那么服务器上的任何依赖项都不会标记为。。。

<scope>provided</scope>

服务器将永远不会在其自身之外"提供"依赖项。

所提供的依赖关系是战争包项目的典型依赖关系,表明服务器将在运行时为它们提供特定的依赖关系。

最新更新