Manuel Álvarez Díaz created MNG-7300:
----------------------------------------
Summary: Reloading web application (Enter) fails due to
java.lang.ClassNotFoundException
Key: MNG-7300
URL: https://issues.apache.org/jira/browse/MNG-7300
Project: Maven
Issue Type: Bug
Components: Class Loading, Core
Affects Versions: 3.8.3, 3.8.2
Environment: Apply to all environments
Reporter: Manuel Álvarez Díaz
Attachments: test-project.zip
Reloading a web application with maven-jetty-plugin 9.4.43.v20210629,
9.4.44.v20210927 or 11.0.6 (at least) is failing when executing with apache
maven 3.8.2 or 3.8.3, but it worked fine with maven 3.8.1.
Error is different with maven-jetty-plugin 9.x vs 11.x ,but in both cases, the
base error is due to java.lang.ClassNotFoundException error (different classes
in each case, but classes which can be correctly loaded with starting the web
context the first time). Error occurs when ENTER (default key for web context
restart) is typed.
NOTE: I had created an incidence for the jetty plugin (see
[6977|https://github.com/eclipse/jetty.project/issues/6977]) but after
analyzing it, it was closed pointing to a core issue.
*Steps to reproduce:*
I have attached a simple Apache Maven project with two submodules presenting
the fail in a very simple scenario:
* Subsytem test-project-util defines a class extending HttpServlet
* Subsystem test-project-service defines a class HelloServlet extending the
class in the test-project-util subsystem
NOTE: In the jax-rs project, error is different, but probably the cause is the
same.
Steps to reproduce the issue:
* unzip test-project.zip file
* cd test-project
* mvn install
* cd test-project-service
* mvn jetty:run
* ENTER (to reload application)
After this, the following exception is raised
{{[INFO] restarting o.e.j.m.p.JettyWebAppContext@55fee662\{WS Test
Service,/test-project-service,file:///D://test-project/test-project-service/src/main/webapp/,AVAILABLE}{file:///D:/test-project/test-project-service/src/main/webapp/}
[INFO] Stopped o.e.j.m.p.JettyWebAppContext@55fee662\{WS Test
Service,/test-project-service,file:///D://test-project/test-project-service/src/main/webapp/,STOPPED}{file:///D:/test-project/test-project-service/src/main/webapp/}
[INFO] Webapp source directory =
D:\\test-project\test-project-service\src\main\webapp
[INFO] Reload Mechanic: manual
[INFO] nonBlocking:false
[INFO] Classes = D:\\test-project\test-project-service\target\classes
[INFO] Context path = /test-project-service
[INFO] Tmp directory = D:\\test-project\test-project-service\target\tmp
[INFO] Web defaults = org/eclipse/jetty/webapp/webdefault.xml
[INFO] Web overrides = none
[INFO] web.xml file =
file:///D://test-project/test-project-service/src/main/webapp/WEB-INF/web.xml
[INFO] Webapp directory = D:\\test-project\test-project-service\src\main\webapp
[INFO] Scanning elapsed time=12ms
[WARNING] Failed startup of context o.e.j.m.p.JettyWebAppContext@55fee662\{WS
Test
Service,/test-project-service,file:///D://test-project/test-project-service/src/main/webapp/,UNAVAILABLE}{file:///D://test-project/test-project-service/src/main/webapp/}
java.lang.NoClassDefFoundError: es/testproject/SimpleRestHttpServletTemplate
at java.lang.ClassLoader.defineClass1 (Native Method)
at java.lang.ClassLoader.defineClass (ClassLoader.java:1017)
at java.security.SecureClassLoader.defineClass (SecureClassLoader.java:174)
at java.net.URLClassLoader.defineClass (URLClassLoader.java:550)
at java.net.URLClassLoader$1.run (URLClassLoader.java:458)
at java.net.URLClassLoader$1.run (URLClassLoader.java:452)
at java.security.AccessController.doPrivileged (Native Method)
at java.net.URLClassLoader.findClass (URLClassLoader.java:451)
at org.eclipse.jetty.webapp.WebAppClassLoader.foundClass
(WebAppClassLoader.java:642)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadAsResource
(WebAppClassLoader.java:615)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass
(WebAppClassLoader.java:529)
at java.lang.ClassLoader.loadClass (ClassLoader.java:522)
at org.eclipse.jetty.util.Loader.loadClass (Loader.java:64)
at org.eclipse.jetty.servlet.BaseHolder.doStart (BaseHolder.java:89)
at org.eclipse.jetty.servlet.ServletHolder.doStart (ServletHolder.java:369)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start
(AbstractLifeCycle.java:73)
at org.eclipse.jetty.servlet.ServletHandler.lambda$initialize$0
(ServletHandler.java:730)
at java.util.stream.SortedOps$SizedRefSortingSink.end (SortedOps.java:357)
at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:485)
at java.util.stream.AbstractPipeline.wrapAndCopyInto
(AbstractPipeline.java:474)
at java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining
(StreamSpliterators.java:312)
at java.util.stream.Streams$ConcatSpliterator.forEachRemaining
(Streams.java:735)
at java.util.stream.ReferencePipeline$Head.forEach
(ReferencePipeline.java:658)
at org.eclipse.jetty.servlet.ServletHandler.initialize
(ServletHandler.java:755)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext
(ServletContextHandler.java:379)
at org.eclipse.jetty.webapp.WebAppContext.startWebapp
(WebAppContext.java:1449)
at org.eclipse.jetty.maven.plugin.JettyWebAppContext.startWebapp
(JettyWebAppContext.java:328)
at org.eclipse.jetty.webapp.WebAppContext.startContext
(WebAppContext.java:1414)
at org.eclipse.jetty.server.handler.ContextHandler.doStart
(ContextHandler.java:910)
at org.eclipse.jetty.servlet.ServletContextHandler.doStart
(ServletContextHandler.java:288)
at org.eclipse.jetty.webapp.WebAppContext.doStart (WebAppContext.java:524)
at org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStart
(JettyWebAppContext.java:397)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start
(AbstractLifeCycle.java:73)
at org.eclipse.jetty.maven.plugin.JettyRunMojo.restartWebApp
(JettyRunMojo.java:468)
at org.eclipse.jetty.maven.plugin.ConsoleScanner.restartWebApp
(ConsoleScanner.java:114)
at org.eclipse.jetty.maven.plugin.ConsoleScanner.checkSystemInput
(ConsoleScanner.java:78)
at org.eclipse.jetty.maven.plugin.ConsoleScanner.run
(ConsoleScanner.java:46)
Caused by: java.lang.ClassNotFoundException:
es.testproject.SimpleRestHttpServletTemplate
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass
(SelfFirstStrategy.java:50)
at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass
(ClassRealm.java:271)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass
(ClassRealm.java:247)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass
(ClassRealm.java:239)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass
(WebAppClassLoader.java:538)
at java.lang.ClassLoader.loadClass (ClassLoader.java:522)
at java.lang.ClassLoader.defineClass1 (Native Method)
at java.lang.ClassLoader.defineClass (ClassLoader.java:1017)
at java.security.SecureClassLoader.defineClass (SecureClassLoader.java:174)
at java.net.URLClassLoader.defineClass (URLClassLoader.java:550)
at java.net.URLClassLoader$1.run (URLClassLoader.java:458)
at java.net.URLClassLoader$1.run (URLClassLoader.java:452)
at java.security.AccessController.doPrivileged (Native Method)
at java.net.URLClassLoader.findClass (URLClassLoader.java:451)
at org.eclipse.jetty.webapp.WebAppClassLoader.foundClass
(WebAppClassLoader.java:642)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadAsResource
(WebAppClassLoader.java:615)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass
(WebAppClassLoader.java:529)
at java.lang.ClassLoader.loadClass (ClassLoader.java:522)
at org.eclipse.jetty.util.Loader.loadClass (Loader.java:64)
at org.eclipse.jetty.servlet.BaseHolder.doStart (BaseHolder.java:89)
at org.eclipse.jetty.servlet.ServletHolder.doStart (ServletHolder.java:369)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start
(AbstractLifeCycle.java:73)
at org.eclipse.jetty.servlet.ServletHandler.lambda$initialize$0
(ServletHandler.java:730)
at java.util.stream.SortedOps$SizedRefSortingSink.end (SortedOps.java:357)
at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:485)
at java.util.stream.AbstractPipeline.wrapAndCopyInto
(AbstractPipeline.java:474)
at java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining
(StreamSpliterators.java:312)
at java.util.stream.Streams$ConcatSpliterator.forEachRemaining
(Streams.java:735)
at java.util.stream.ReferencePipeline$Head.forEach
(ReferencePipeline.java:658)
at org.eclipse.jetty.servlet.ServletHandler.initialize
(ServletHandler.java:755)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext
(ServletContextHandler.java:379)
at org.eclipse.jetty.webapp.WebAppContext.startWebapp
(WebAppContext.java:1449)
at org.eclipse.jetty.maven.plugin.JettyWebAppContext.startWebapp
(JettyWebAppContext.java:328)
at org.eclipse.jetty.webapp.WebAppContext.startContext
(WebAppContext.java:1414)
at org.eclipse.jetty.server.handler.ContextHandler.doStart
(ContextHandler.java:910)
at org.eclipse.jetty.servlet.ServletContextHandler.doStart
(ServletContextHandler.java:288)
at org.eclipse.jetty.webapp.WebAppContext.doStart (WebAppContext.java:524)
at org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStart
(JettyWebAppContext.java:397)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start
(AbstractLifeCycle.java:73)
at org.eclipse.jetty.maven.plugin.JettyRunMojo.restartWebApp
(JettyRunMojo.java:468)
at org.eclipse.jetty.maven.plugin.ConsoleScanner.restartWebApp
(ConsoleScanner.java:114)
at org.eclipse.jetty.maven.plugin.ConsoleScanner.checkSystemInput
(ConsoleScanner.java:78)
at org.eclipse.jetty.maven.plugin.ConsoleScanner.run
(ConsoleScanner.java:46)
[INFO] Restart completed at Mon Oct 11 11:32:24 CEST 2021}}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)