Vaadin 7.7.16 -> java.lang.ClassNotFoundException: com.vaadin.server.VaadinServlet - PullRequest
0 голосов
/ 27 февраля 2019

На Ваадине 7.3.6 этот код работает нормально:

 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);
            }
        }

Но на Ваадине 7.7.16 Я получаю ошибку:

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

1 Ответ

0 голосов
/ 07 марта 2019

Причина: java.lang.ClassNotFoundException: com.vaadin.server.VaadinServlet

Класс, который явно не найден в пути к классам (VaadinServlet), содержится в vaadin-сервера 7.7.16.jar.При запуске приложения вы должны убедиться, что эта библиотека находится в вашем пути к классам.

Я создал минимальный пример проекта (maven) на основе maven archetype vaadin-archetype-aaplication с помощью команды:

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

и добавил ваш код в UI.init (VaadinRequest vaadinRequest) (+ я добавил зависимость для jetty-webapp, чтобы разрешить импорт).

Если у меня есть следующая зависимость в моем pom.xml

    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-server</artifactId>
    </dependency>

(которая по умолчанию в этом архетипе)

Я могу запустить / запустить приложение безлюбые проблемы.

Если я знаю, принудительно, что зависимость vaadin-server не добавляется в путь к классу (пометив его как предоставленный)

    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-server</artifactId>
        <scope>provided</scope>
    </dependency>

Затем при попытке запустить приложение, онозавершается с:

[ОШИБКА] Не удалось выполнить цель org.eclipse.jetty: jetty-maven-plugin: 9.3.9.v20160517: выполнить (default-cli) для проекта имя проекта: выполнениеdefault-cli цели org.eclipse.jetty: jetty-maven-plugin: 9.3.9.v20160517: выполнить не удалось: при выполнении org.eclipse.jetty: jetty-maven-plugin: 9.3.9.v20160517 отсутствует требуемый класс.: run: com / vaadin / server / VaadinServlet

, поскольку указанный класс больше не находится на пути к классам.

...