运行 jetty 时出错 NoClassDefFoundError

Error NoClassDefFoundError when run jetty

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

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

Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletResponse at com.my.test.Main.main(Main.java:13) Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletResponse 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) ... 1 more

代码:

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>

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

提前谢谢你。

如果您正在使用嵌入式码头,那么服务器上的任何依赖项都不会被标记为...

<scope>provided</scope>

服务器永远不会在自身之外有依赖项"provided"。

Provided dependencies 对于 war 打包的项目来说是典型的,表明服务器将在运行时为它们提供特定的依赖关系。