0

I try to create a jetty server in jar executable I have maven 3.6.0 AND OpenJdk 11.0.4

my first run failed I receive the following error when I launch my code :

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

Code :

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 :

    <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>

I don't understand what's happend, someone can help ?

thank you by advance.

Yo911
  • 13
  • 1
  • 7
  • Check this question: https://stackoverflow.com/questions/31295771/generate-a-jar-with-embedded-jetty-using-maven-jetty-plugin – sanastasiadis Oct 25 '19 at 15:00
  • Thank you but it didn't work, I have always the same exception, whatever I do. – Yo911 Oct 25 '19 at 15:27
  • The class `HttpServletResponse` that is missing, is located in the servlet-api. Did you try to have it as a normal dependency, and `not` as provided? And then check if it ends up inside your jar. – sanastasiadis Oct 25 '19 at 15:30

1 Answers1

2

If you are doing embedded-jetty, then no dependencies on the server will ever be marked as ...

<scope>provided</scope>

The Server will never have dependencies "provided" outside of itself.

Provided dependencies is typical for war packaged projects, indicating that the server will provide that specific dependency for them at runtime.

Joakim Erdfelt
  • 46,896
  • 7
  • 86
  • 136