jetty / jetty.project

Eclipse Jetty® - Web Container & Clients - supports HTTP/2, HTTP/1.1, HTTP/1.0, websocket, servlets, and more
https://eclipse.dev/jetty
Other
3.84k stars 1.91k forks source link

Jetty-12 : Review slf4j behaviors with the jetty-ee#-maven-plugins #8281

Open joakime opened 2 years ago

joakime commented 2 years ago

Jetty version(s) 12

Java version/vendor (use: java -version) 17

Description

Two things have been noticed when working with the tests against the jetty-ee#-maven-plugin implementations in Jetty 12.

First, is that there seems to be no way to show output.

You'll get ...

SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.

I have not found a configuration of a <packaging>war</packaging> project that uses the jetty-ee#-maven-plugin that will allow output to show.

And secondly, is the ELContextCleaner triggers exceptions ...

[INFO] jetty-12.0.0-SNAPSHOT; built: 2022-07-11T18:25:42.282Z; git: 67d03825080c75831e682a2a2b64665901d4f139; jvm 17.0.3+7
[WARNING] Failed startup of context o.e.j.e.m.p.MavenWebAppContext@31834a2b{ROOT,/,[file:///home/joakim/code/jetty/jetty.project-12.0.x/tests/jetty-ee9-test-maven-plugin/target/it/jetty-start-mojo-multi-module-single-war-it/webapp-war/src/main/webapp/],false}{file:///home/joakim/code/jetty/jetty.project-12.0.x/tests/jetty-ee9-test-maven-plugin/target/it/jetty-start-mojo-multi-module-single-war-it/webapp-war/src/main/webapp/}
java.lang.NoClassDefFoundError: org/slf4j/spi/SLF4JServiceProvider
    at java.lang.ClassLoader.defineClass1 (Native Method)
    at java.lang.ClassLoader.defineClass (ClassLoader.java:1012)
    at java.security.SecureClassLoader.defineClass (SecureClassLoader.java:150)
    at java.net.URLClassLoader.defineClass (URLClassLoader.java:524)
    at java.net.URLClassLoader$1.run (URLClassLoader.java:427)
    at java.net.URLClassLoader$1.run (URLClassLoader.java:421)
    at java.security.AccessController.doPrivileged (AccessController.java:712)
    at java.net.URLClassLoader.findClass (URLClassLoader.java:420)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf (ClassRealm.java:425)
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass (SelfFirstStrategy.java:42)
    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.ee9.webapp.WebAppClassLoader.loadClass (WebAppClassLoader.java:511)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:520)
    at java.lang.Class.forName0 (Native Method)
    at java.lang.Class.forName (Class.java:467)
    at java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass (ServiceLoader.java:1217)
    at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService (ServiceLoader.java:1228)
    at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext (ServiceLoader.java:1273)
    at java.util.ServiceLoader$2.hasNext (ServiceLoader.java:1309)
    at java.util.ServiceLoader$3.hasNext (ServiceLoader.java:1393)
    at org.slf4j.LoggerFactory.findServiceProviders (LoggerFactory.java:104)
    at org.slf4j.LoggerFactory.bind (LoggerFactory.java:147)
    at org.slf4j.LoggerFactory.performInitialization (LoggerFactory.java:139)
    at org.slf4j.LoggerFactory.getProvider (LoggerFactory.java:421)
    at org.slf4j.LoggerFactory.getILoggerFactory (LoggerFactory.java:407)
    at org.slf4j.LoggerFactory.getLogger (LoggerFactory.java:356)
    at org.slf4j.LoggerFactory.getLogger (LoggerFactory.java:382)
    at org.eclipse.jetty.ee9.servlet.listener.ELContextCleaner.<clinit> (ELContextCleaner.java:37)
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method)
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstanceWithCaller (Constructor.java:499)
    at java.lang.reflect.Constructor.newInstance (Constructor.java:480)
    at org.eclipse.jetty.ee9.nested.ContextHandler$APIContext.createInstance (ContextHandler.java:2184)
    at org.eclipse.jetty.ee9.servlet.ServletContextHandler$ServletAPIContext.createInstance (ServletContextHandler.java:1269)
    at org.eclipse.jetty.ee9.servlet.ServletContextHandler$ServletAPIContext.createInstance (ServletContextHandler.java:1278)
    at org.eclipse.jetty.ee9.servlet.BaseHolder.createInstance (BaseHolder.java:204)
    at org.eclipse.jetty.ee9.servlet.ListenerHolder.createInstance (ListenerHolder.java:100)
    at org.eclipse.jetty.ee9.servlet.ListenerHolder.doStart (ListenerHolder.java:89)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:93)
    at org.eclipse.jetty.ee9.servlet.ServletContextHandler.startContext (ServletContextHandler.java:370)
    at org.eclipse.jetty.ee9.webapp.WebAppContext.startContext (WebAppContext.java:1294)
    at org.eclipse.jetty.ee9.nested.ContextHandler.doStart (ContextHandler.java:644)
    at org.eclipse.jetty.ee9.servlet.ServletContextHandler.doStart (ServletContextHandler.java:294)
    at org.eclipse.jetty.ee9.webapp.WebAppContext.doStart (WebAppContext.java:516)
    at org.eclipse.jetty.ee9.maven.plugin.MavenWebAppContext.doStart (MavenWebAppContext.java:294)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:93)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:171)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:114)
    at org.eclipse.jetty.server.Handler$Abstract.doStart (Handler.java:391)
    at org.eclipse.jetty.server.handler.ContextHandler.lambda$doStart$0 (ContextHandler.java:517)
    at org.eclipse.jetty.server.handler.ContextHandler$Context.call (ContextHandler.java:888)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart (ContextHandler.java:517)
    at org.eclipse.jetty.ee9.nested.ContextHandler$CoreContextHandler.doStart (ContextHandler.java:2485)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:93)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:171)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:121)
    at org.eclipse.jetty.server.Handler$Abstract.doStart (Handler.java:391)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:93)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:171)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:121)
    at org.eclipse.jetty.server.Handler$Abstract.doStart (Handler.java:391)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:93)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:171)
    at org.eclipse.jetty.server.Server.start (Server.java:477)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:121)
    at org.eclipse.jetty.server.Handler$Abstract.doStart (Handler.java:391)
    at org.eclipse.jetty.server.Server.doStart (Server.java:417)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:93)
    at org.eclipse.jetty.ee9.maven.plugin.JettyEmbedder.doStart (JettyEmbedder.java:225)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:93)
    at org.eclipse.jetty.ee9.maven.plugin.JettyStartMojo.startJettyEmbedded (JettyStartMojo.java:54)
    at org.eclipse.jetty.ee9.maven.plugin.AbstractWebAppMojo.startJetty (AbstractWebAppMojo.java:441)
    at org.eclipse.jetty.ee9.maven.plugin.AbstractWebAppMojo.execute (AbstractWebAppMojo.java:419)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:972)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: java.lang.ClassNotFoundException: org.slf4j.spi.SLF4JServiceProvider
    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 java.lang.ClassLoader.defineClass1 (Native Method)
    at java.lang.ClassLoader.defineClass (ClassLoader.java:1012)
    at java.security.SecureClassLoader.defineClass (SecureClassLoader.java:150)
    at java.net.URLClassLoader.defineClass (URLClassLoader.java:524)
    at java.net.URLClassLoader$1.run (URLClassLoader.java:427)
    at java.net.URLClassLoader$1.run (URLClassLoader.java:421)
    at java.security.AccessController.doPrivileged (AccessController.java:712)
    at java.net.URLClassLoader.findClass (URLClassLoader.java:420)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf (ClassRealm.java:425)
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass (SelfFirstStrategy.java:42)
    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.ee9.webapp.WebAppClassLoader.loadClass (WebAppClassLoader.java:511)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:520)
    at java.lang.Class.forName0 (Native Method)
    at java.lang.Class.forName (Class.java:467)
    at java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass (ServiceLoader.java:1217)
    at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService (ServiceLoader.java:1228)
    at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext (ServiceLoader.java:1273)
    at java.util.ServiceLoader$2.hasNext (ServiceLoader.java:1309)
    at java.util.ServiceLoader$3.hasNext (ServiceLoader.java:1393)
    at org.slf4j.LoggerFactory.findServiceProviders (LoggerFactory.java:104)
    at org.slf4j.LoggerFactory.bind (LoggerFactory.java:147)
    at org.slf4j.LoggerFactory.performInitialization (LoggerFactory.java:139)
    at org.slf4j.LoggerFactory.getProvider (LoggerFactory.java:421)
    at org.slf4j.LoggerFactory.getILoggerFactory (LoggerFactory.java:407)
    at org.slf4j.LoggerFactory.getLogger (LoggerFactory.java:356)
    at org.slf4j.LoggerFactory.getLogger (LoggerFactory.java:382)
    at org.eclipse.jetty.ee9.servlet.listener.ELContextCleaner.<clinit> (ELContextCleaner.java:37)
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method)
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstanceWithCaller (Constructor.java:499)
    at java.lang.reflect.Constructor.newInstance (Constructor.java:480)
    at org.eclipse.jetty.ee9.nested.ContextHandler$APIContext.createInstance (ContextHandler.java:2184)
    at org.eclipse.jetty.ee9.servlet.ServletContextHandler$ServletAPIContext.createInstance (ServletContextHandler.java:1269)
    at org.eclipse.jetty.ee9.servlet.ServletContextHandler$ServletAPIContext.createInstance (ServletContextHandler.java:1278)
    at org.eclipse.jetty.ee9.servlet.BaseHolder.createInstance (BaseHolder.java:204)
    at org.eclipse.jetty.ee9.servlet.ListenerHolder.createInstance (ListenerHolder.java:100)
    at org.eclipse.jetty.ee9.servlet.ListenerHolder.doStart (ListenerHolder.java:89)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:93)
    at org.eclipse.jetty.ee9.servlet.ServletContextHandler.startContext (ServletContextHandler.java:370)
    at org.eclipse.jetty.ee9.webapp.WebAppContext.startContext (WebAppContext.java:1294)
    at org.eclipse.jetty.ee9.nested.ContextHandler.doStart (ContextHandler.java:644)
    at org.eclipse.jetty.ee9.servlet.ServletContextHandler.doStart (ServletContextHandler.java:294)
    at org.eclipse.jetty.ee9.webapp.WebAppContext.doStart (WebAppContext.java:516)
    at org.eclipse.jetty.ee9.maven.plugin.MavenWebAppContext.doStart (MavenWebAppContext.java:294)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:93)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:171)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:114)
    at org.eclipse.jetty.server.Handler$Abstract.doStart (Handler.java:391)
    at org.eclipse.jetty.server.handler.ContextHandler.lambda$doStart$0 (ContextHandler.java:517)
    at org.eclipse.jetty.server.handler.ContextHandler$Context.call (ContextHandler.java:888)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart (ContextHandler.java:517)
    at org.eclipse.jetty.ee9.nested.ContextHandler$CoreContextHandler.doStart (ContextHandler.java:2485)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:93)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:171)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:121)
    at org.eclipse.jetty.server.Handler$Abstract.doStart (Handler.java:391)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:93)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:171)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:121)
    at org.eclipse.jetty.server.Handler$Abstract.doStart (Handler.java:391)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:93)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:171)
    at org.eclipse.jetty.server.Server.start (Server.java:477)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:121)
    at org.eclipse.jetty.server.Handler$Abstract.doStart (Handler.java:391)
    at org.eclipse.jetty.server.Server.doStart (Server.java:417)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:93)
    at org.eclipse.jetty.ee9.maven.plugin.JettyEmbedder.doStart (JettyEmbedder.java:225)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:93)
    at org.eclipse.jetty.ee9.maven.plugin.JettyStartMojo.startJettyEmbedded (JettyStartMojo.java:54)
    at org.eclipse.jetty.ee9.maven.plugin.AbstractWebAppMojo.startJetty (AbstractWebAppMojo.java:441)
    at org.eclipse.jetty.ee9.maven.plugin.AbstractWebAppMojo.execute (AbstractWebAppMojo.java:419)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:972)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
[INFO] Started oejen.ContextHandler$CoreContextHandler@40bf4386{ROOT,/,[file:///home/joakim/code/jetty/jetty.project-12.0.x/tests/jetty-ee9-test-maven-plugin/target/it/jetty-start-mojo-multi-module-single-war-it/webapp-war/src/main/webapp/],false}
[INFO] Started ServerConnector@2f677247{HTTP/1.1, (http/1.1)}{0.0.0.0:41631}
[INFO] Started oejs.Server@31acfd4e{STARTING}[12.0.0-SNAPSHOT,sto=0] @2268ms
joakime commented 2 years ago

Having an IT test project that currently is not able to show output, being configured to show output would be a great first start. It should be a war project that has something that will prevent proper initialization of the webapp. This kind of error should be presented to the user.

See changes from PR #8106 for details on discussion, and what changes made there need review.

janbartel commented 2 years ago

The jetty-maven-plugin since we changed jetty to use the slf4j-api has only 2 ways to define the jetty logger implementation:

  1. when running forked: add the desired slf4j impl to the plugin <dependencies> (this effectively puts the slf4j impl on the container classpath)
  2. when running with the distro: add the desired slf4j impl to the plugin configuration's list of <modules>
  3. when running fully embedded: the slf4j impl comes from maven

It is not correct to add a <dependency> to the webapp to solve a container classpath problem.

I'm fairly sure the majority of the plugin it tests will show output, however there may be 1 or 2 that are not configured properly - identifying and fixing those would be useful for diagnosing it test failures.

github-actions[bot] commented 1 year ago

This issue has been automatically marked as stale because it has been a full year without activity. It will be closed if no further activity occurs. Thank you for your contributions.