Ошибка NoClassDefFoundError при запуске причала - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь создать джет-сервер в исполняемом jar-файле. У меня maven 3.6.0 И OpenJdk 11.0.4

При первом запуске не удалось получить следующую ошибку при запуске кода:

Исключение в потоке "основной".servlet.http.HttpServletResponse в java.base / jdk.internal.loader.BuiltinClassLoader.loadClass (BuiltinClassLoader.java:583) в java.base / jdk.internal.loader.ClassLoaders $ AppClassLoader.loadClass (ClassLoaders.java:178)at 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>

Я не понимаю, что случилось, кто-то может помочь?

Заранее спасибо.

1 Ответ

0 голосов
/ 26 октября 2019

Если вы выполняете встроенный Jetty, то никакие зависимости на сервере никогда не будут помечены как ...

<scope>provided</scope>

Сервер никогда не будет иметь "предоставленных" зависимостей вне себя.

Предоставленные зависимости типичны для упакованных проектов, указывающих на то, что сервер предоставит им эту конкретную зависимость во время выполнения.

...