web-dev-qa-db-fra.com

Impossible de démarrer le serveur de démarrage printanier

Je suis nouveau sur Spring Boot et lorsque j'essaie de démarrer mon serveur, j'obtiens l'exception suivante. Je comprends que cela a quelque chose à voir avec un conflit de dépendance, mais que je ne parviens toujours pas à le comprendre.

 Exception in thread "main" Java.lang.IllegalArgumentException:
 LoggerFactory is not a Logback LoggerContext but Logback is on the
 classpath. Either remove Logback or the competing implementation
 (class org.slf4j.impl.Log4jLoggerFactory) Object of class
 [org.slf4j.impl.Log4jLoggerFactory] must be an instance of class
 ch.qos.logback.classic.LoggerContext   at
 org.springframework.util.Assert.isInstanceOf(Assert.Java:339)  at
 org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.Java:93)
        at
org.springframework.boot.logging.AbstractLoggingSystem.initializeWithSensibleDefaults(AbstractLoggingSystem.Java:62)
        at

 org.springframework.boot.logging.AbstractLoggingSystem.beforeInitialize(AbstractLoggingSystem.Java:45)
    at

org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize(LogbackLoggingSystem.Java:69)
    at

 org.springframework.boot.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.Java:135)
    at

 org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.Java:98)
    at

 org.springframework.boot.context.event.EventPublishingRunListener.publishEvent(EventPublishingRunListener.Java:100)
    at

 org.springframework.boot.context.event.EventPublishingRunListener.started(EventPublishingRunListener.Java:54)
    at

 org.springframework.boot.SpringApplication.run(SpringApplication.Java:276)
    at

 org.springframework.boot.SpringApplication.run(SpringApplication.Java:952)
    at

 org.springframework.boot.SpringApplication.run(SpringApplication.Java:941)
    at org.magnum.mobilecloud.video.Application.main(Application.Java:30)

Résolu: Ajouter ce qui suit au fichier POM.xml

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-Tomcat</artifactId>
            </exclusion>
            <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
    </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j</artifactId>
    </dependency>
22
jith912

À l'exclusion delogback-classicde actionneur de démarreur à ressort et actionneur de démarreur à démarrage à ressort travaillé pour moi

compile("org.springframework.boot:spring-boot-starter-web:1.1.10.RELEASE") {
    exclude module: "spring-boot-starter-Tomcat"
    exclude module: "spring-boot-starter-logging"
    exclude module: "logback-classic"
}
compile("org.springframework.boot:spring-boot-starter-actuator:1.1.10.RELEASE") {
    exclude module: "logback-classic"
}
11
ianaz

Ajoutez ceci à votre build.gradle

configurations.all {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-Tomcat'
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
        exclude group: 'org.springframework.boot', module: 'logback-classic'
}
4
Quy Tang

Dans mon projet, il utilise 

  1. botte à ressort 1.4.2.LELEASE
  2. slf4j 1.7.21 et logback 1.1.7. (certaines dépendances, appelées module A, dépendent de logback 1.1.2, c’est le problème)

Première Introduction au mécanisme de dépendance

Médiation de dépendance - détermine la version d'une dépendance qui sera utilisée lorsque plusieurs versions d'un artefact sont rencontrées. Actuellement, Maven 2.0 prend uniquement en charge l'utilisation de la "définition la plus proche", ce qui signifie qu'il utilisera la version de la dépendance la plus proche de votre projet dans l'arborescence des dépendances. Vous pouvez toujours garantir une version en la déclarant explicitement dans le POM de votre projet. Notez que si deux versions de dépendance ont la même profondeur dans l'arborescence des dépendances, jusqu'à la version 2.0.8 de Maven, il était impossible de déterminer laquelle gagnerait, mais depuis Maven 2.0.9, c'est l'ordre dans la déclaration qui compte: la première déclaration gagne. "définition la plus proche" signifie que la version utilisée sera la plus proche de votre projet dans l'arborescence des dépendances, par exemple. si les dépendances pour A, B et C sont définies comme étant A -> B -> C -> D 2.0 et A -> E -> D 1.0, alors D 1.0 sera utilisé lors de la construction de A car le chemin de A à D passe par E est plus court. Vous pouvez explicitement ajouter une dépendance à D 2.0 en A pour forcer l'utilisation de D 2.0.

Donc maven utilisera logback 1.1.7 dans mon projet. Je ne suis pas sûr que ce soit mon module A non compatible avec 1.1.7 ou logback 1.1.7 non compatible avec slf4j 1.7.21 Peu importe, dans mon cas. J'ajoute dependencyManagement dans mon pom. Dites à maven uniquement l’utilisation de lockback 1.1.2. Problème résolu.

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-access</artifactId>
            <version>1.1.2</version>
        </dependency>
    </dependencies>
</dependencyManagement>
1
cicidi

la configuration suivante dans mon fichier gradle.build a fonctionné pour moi:

configurations {
    all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-logging"
    all*.exclude group: "ch.qos.logback"
    all*.exclude group: "org.slf4j", module: "log4j-over-slf4j" // allow using log4j 2.x
    all*.exclude group: "org.slf4j", module: "slf4j-simple"     // log4j is the configured backend
}
1
amazia

Spring Boot prend en charge Log4j 2 pour la configuration de la consignation s’il se trouve sur le chemin de classe. Si vous utilisez les démarreurs pour assembler des dépendances, vous devez exclure Logback, puis inclure log4j 2. 

0
Prasanth Mohan

La solution Gradle ajoute les lignes ci-dessous dans build.gradle:

configurations {
    all*.exclude module : 'spring-boot-starter-logging'
}
0
nanosoft

Répétez la réponse, mais vous pouvez utiliser Eclipse pour exclure la dépendance spring-boot-starter-logging

  1. Sélectionner la hiérarchie des dépendances
  2. Recherche de journalisation en haut à droite
  3. Sélectionnez Spring-Boot-Starter-Logging
  4. Clic droit exclure l'artefact maven

par exemple, __. entrez la description de l'image ici

0
Ajar Vashisth

Je vous recommanderais d'essayer de supprimer toute dépendance contenant le journal, la plus courante étant:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

Cela a fonctionné pour moi.

0
EliuX