Je suis passé de Windows à Ubuntu 17.04 et maintenant je reçois une erreur lorsque je lance la webapp sur un Tomcat 8.0.36 via Eclipse Neon.3 Release (4.6.3).Logback ClassCircularityError
java.lang.ClassCircularityError: ch/qos/logback/core/spi/FilterReply
Le projet est construit via M2E à AspectJ.
utilisations suivantes Dépendances SLF4J:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.21</version>
</dependency>
Il fonctionne sous Windows de Eclipse avec des paramètres presque identiques et installation. Il fonctionne également quand je mvn clean package
(l'installation d'Ubuntu maven par défaut n'éclipse pas un) et déployé manuellement à l'installation de Tomcat par défaut d'Ubuntu. J'ai déjà changé ma version d'éclipse en Oxygen et j'ai eu le même problème. J'ai aussi essayé de changer les versions des dépendances - même résultat.
J'ai debuged le code à un « ServletContextListener » qui tente d'obtenir un objet JDNI:
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.slf4j.LoggerFactory;
import org.slf4j.bridge.SLF4JBridgeHandler;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.classic.jul.LevelChangePropagator;
import ch.qos.logback.core.util.StatusPrinter;
// ....
@Override
public void contextInitialized(final ServletContextEvent sce) {
new LogRecord(Level.FINEST, "Ensure class is loaded!");
// Prepare logging context
final LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
context.reset();
// setup JUL to SLF4J log bridging
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
final LevelChangePropagator levelChangePropagator = new LevelChangePropagator();
levelChangePropagator.setResetJUL(true);
levelChangePropagator.setContext(context);
levelChangePropagator.start();
context.addListener(levelChangePropagator);
// Load context values
String contextPath = sce.getServletContext().getContextPath().replaceAll("[^0-9a-zA-Z-_]", "");
if(contextPath.length() == 0){
contextPath = "ROOT";
}
context.putProperty("appName", contextPath);
final Boolean isProductiveVal = (Boolean) getJNDI(IS_PRODUCTIVE_JNDI);
// .....
private static Object getJNDI(final String jndiPath) {
try {
final Context initialContext = new InitialContext(); // << This line crashes
return initialContext.lookup(jndiPath);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Je n'ai aucune idée ce que je pourrais essayer de le réparer. Et aussi je ne comprends pas complètement le problème. Tomcat essaie de charger une classe qui se réfère à elle-même ?!
Est-ce que quelqu'un a une idée de ce que je pourrais vérifier?
Pile complète de départ Tomcat.
Sep 06, 2017 5:05:36 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNUNG: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:MyProject' did not find a matching property.
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Server version: Apache Tomcat/8.0.36
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Server built: Jun 9 2016 13:55:50 UTC
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Server number: 8.0.36.0
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: OS Name: Linux
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: OS Version: 4.10.0-33-generic
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Architecture: amd64
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Java Home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: JVM Version: 1.8.0_131-8u131-b11-2ubuntu1.17.04.3-b11
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: JVM Vendor: Oracle Corporation
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: CATALINA_BASE: /home/kani/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: CATALINA_HOME: /opt/tomcat8
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:37177
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Drebel.base=/home/kani/.jrebel
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Drebel.env.ide.plugin.version=7.0.14
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Drebel.env.ide.version=4.6.3
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Drebel.env.ide.product=Eclipse
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Drebel.env.ide=eclipse
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Drebel.notification.url=http://localhost:17434
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Drebel.workspace.path=/home/kani/eclipse-workspace
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Drebel.properties=/home/kani/.jrebel/jrebel.properties
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -agentpath:/opt/eclipse/plugins/org.zeroturnaround.eclipse.embedder_7.0.14.RELEASE/jrebel/lib/libjrebel64.so
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Dcatalina.base=/home/kani/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Dcatalina.home=/opt/tomcat8
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Dwtp.deploy=/home/kani/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Djava.endorsed.dirs=/opt/tomcat8/endorsed
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Dfile.encoding=UTF-8
Sep 06, 2017 5:05:36 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFORMATION: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib
Sep 06, 2017 5:05:36 PM org.apache.coyote.AbstractProtocol init
INFORMATION: Initializing ProtocolHandler ["http-nio-8080"]
Sep 06, 2017 5:05:36 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFORMATION: Using a shared selector for servlet write/read
Sep 06, 2017 5:05:36 PM org.apache.coyote.AbstractProtocol init
INFORMATION: Initializing ProtocolHandler ["ajp-nio-8009"]
Sep 06, 2017 5:05:36 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFORMATION: Using a shared selector for servlet write/read
Sep 06, 2017 5:05:36 PM org.apache.catalina.startup.Catalina load
INFORMATION: Initialization processed in 802 ms
Sep 06, 2017 5:05:36 PM org.apache.catalina.core.StandardService startInternal
INFORMATION: Starting service Catalina
Sep 06, 2017 5:05:36 PM org.apache.catalina.core.StandardEngine startInternal
INFORMATION: Starting Servlet Engine: Apache Tomcat/8.0.36
2017-09-06 17:05:37 JRebel: Directory '/home/kani/eclipse-workspace/MyProject/target/classes' will be monitored for changes.
2017-09-06 17:05:37 JRebel: Directory '/home/kani/eclipse-workspace/MyProject/target/m2e-wtp/web-resources' will be monitored for changes.
2017-09-06 17:05:37 JRebel: Directory '/home/kani/eclipse-workspace/MyProject/src/main/webapp' will be monitored for changes.
Sep 06, 2017 5:05:41 PM org.apache.jasper.servlet.TldScanner scanJars
INFORMATION: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Sep 06, 2017 5:05:41 PM org.apache.catalina.core.ApplicationContext log
INFORMATION: No Spring WebApplicationInitializer types detected on classpath
java.lang.ClassCircularityError: ch/qos/logback/core/spi/FilterReply
at ch.qos.logback.classic.LoggerContext.getTurboFilterChainDecision_0_3OrMore(LoggerContext.java:267)
at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:373)
at ch.qos.logback.classic.Logger.log(Logger.java:765)
at org.slf4j.bridge.SLF4JBridgeHandler.callLocationAwareLogger(SLF4JBridgeHandler.java:221)
at org.slf4j.bridge.SLF4JBridgeHandler.publish(SLF4JBridgeHandler.java:303)
at java.util.logging.Logger.log(Logger.java:738)
at java.util.logging.Logger.doLog(Logger.java:765)
at java.util.logging.Logger.logp(Logger.java:931)
at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:180)
at org.apache.juli.logging.DirectJDKLog.debug(DirectJDKLog.java:103)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:361)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:152)
at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.__invoke(DelegatingMethodAccessorImpl.java:43)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
ClassCircularityError: levée lorsque la machine virtuelle Java détecte une circularité dans la hiérarchie de superclasse d'une classe en cours de chargement. – Kayaman
Le problème se reproduit-il si vous désactivez JRebel? –
Nope ne fonctionne pas eigther :( – Kani