Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] creating runnable wars with maven

Curious, is it possible to run an embedded jetty with an exploded war file?  (This will make uploaded a specific jar to production faster since the file payload is less than having to push the entire .war file)


On Thu, Feb 28, 2013 at 7:22 AM, S Ahmed <sahmed1020@xxxxxxxxx> wrote:
According to this article: http://jowisoftware.de/blog/archives/26-Creating-runnable-wars-with-Maven-and-Jetty.html

When trying to run:

java -jar myproject.war

I get the main-class error:

Exception in thread "main" java.lang.NoClassDefFoundError: com/myprjoect/path/to/main/ClassName

According to that article the issue is: "The problem is easy to understand: when starting Java with -jar, it expects a "normal" file structure. So if the Main-Class is "de.jowisoftware.Main", Java looks for de/jowisoftware/Main.class. The classloader does not understand the concept, that, in war files all class files are in WEB-INF/classes. If jetty is included in the war file, it is included as a jar file, so the classloader has to support nested archives. The default one doesn't. Thankfully, there are solutions."

What options do I have, is it basically how the author of the blog posts states?  

Or is the alternative ways to embedding jetty and then launching it?


I have this:

ProtectionDomain protectionDomain = HttpServer.class.getProtectionDomain();
        String warFile = protectionDomain.getCodeSource().getLocation().toExternalForm();
        String currentDir = new File(protectionDomain.getCodeSource().getLocation().getPath()).getParent();

        WebAppContext webAppContext = new WebAppContext(warFile, contextPath);

        resetTempDirectory(webAppContext, currentDir);

        webAppContext.setParentLoaderPriority(true);
        server.setHandler(webAppContext);

        server.start();
        server.join();



Back to the top