Reputation: 15726
On Vaadin 7.3.6 this code work fine:
import org.apache.log4j.Logger;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext; this work fine
import org.apache.log4j.Logger;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
private void start() {
try {
WebAppContext context = new WebAppContext();
Server server = new Server(port);
String descriptor = getClass().getResource("/web.xml").toString();
context.setDescriptor(descriptor);
context.setResourceBase("classpath");
context.setParentLoaderPriority(true);
if (ProxyConfig.secureCookies())
context.getSessionHandler().getSessionManager().getSessionCookieConfig().setSecure(true);
server.setSendServerVersion(false);
server.setHandler(context);
BackendService.getInstance();
server.start(); // ERROR HERE
server.join();
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
}
But on Vaadin 7.7.16 I get error:
[ERROR] 27.02.2019 20:26:33.375 [main] myproject.client.AppStarter.start(AppStarter.java:42)
com/vaadin/server/VaadinServlet
java.lang.NoClassDefFoundError: com/vaadin/server/VaadinServlet
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:407)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:383)
at org.eclipse.jetty.util.Loader.loadClass(Loader.java:100)
at org.eclipse.jetty.util.Loader.loadClass(Loader.java:79)
at org.eclipse.jetty.servlet.Holder.doStart(Holder.java:107)
at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:298)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:791)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1242)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)
at org.eclipse.jetty.server.Server.doStart(Server.java:282)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at myproject.client.AppStarter.start(AppStarter.java:35)
at myproject.client.AppStarter.<init>(AppStarter.java:56)
at myproject.client.AppStarter.main(AppStarter.java:61)
Caused by: java.lang.ClassNotFoundException: com.vaadin.server.VaadinServlet
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 31 more
[DEBUG] 27.02.2019 20:26:38.255 [DICTIONARY_SYNC] myproject.client.service.DictionaryService$1.run(DictionaryService.java:38)
Upvotes: 0
Views: 1188
Reputation: 2358
Caused by: java.lang.ClassNotFoundException: com.vaadin.server.VaadinServlet
The class that is obviously not found on the class path (VaadinServlet) is contained in vaadin-server-7.7.16.jar. You must ensure that this library is on your class path when starting your application.
I created a minimum example project (maven) based on the maven archetype vaadin-archetype-aaplication by command:
mvn archetype:generate \
-DarchetypeGroupId=com.vaadin \
-DarchetypeArtifactId=vaadin-archetype-application \
-DarchetypeVersion=7.7.16 \
-DgroupId=com.pany \
-DartifactId=project-name \
-Dversion=0.1 \
-Dpackaging=war
and added your code in UI.init(VaadinRequest vaadinRequest) (+ I added a dependency for jetty-webapp to get the imports resolved).
If I have the following dependency in my pom.xml
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-server</artifactId>
</dependency>
(which it is by default in that archetype)
I can run/start the app without any problems.
If I know force that the vaadin-server dependency is not added to the class path (by marking it as provided)
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-server</artifactId>
<scope>provided</scope>
</dependency>
Then when trying to start the app it fails with:
[ERROR] Failed to execute goal org.eclipse.jetty:jetty-maven-plugin:9.3.9.v20160517:run (default-cli) on project project-name: Execution default-cli of goal org.eclipse.jetty:jetty-maven-plugin:9.3.9.v20160517:run failed: A required class was missing while executing org.eclipse.jetty:jetty-maven-plugin:9.3.9.v20160517:run: com/vaadin/server/VaadinServlet
because the mentioned class is no longer on the class path.
Upvotes: 1