2017-02-16 139 views
0

我收到以下錯誤:LinkageError類 - 裝載機約束衝突 - 解決方法時, 「org.slf4j.impl.StaticLoggerBinder.getLoggerFactory()」

ContextListenerjava.lang.LinkageError: loader constraint violation: when resolving method "org.slf4j.impl.StaticLoggerBinder.getLoggerFactory()Lorg/slf4j/ILoggerFactory;" the class loader '[email protected] (urls: ['], parents: [)'[email protected]']) of the current class, org/slf4j/LoggerFactory, and the class loader 'System (urls: [''file:/usr/lib/jvm/jvm_8/jvm_8/lib/jvmx.jar', 'file:/usr/lib/jvm/jvm_8/jvm_8/lib/tools.jar', 'file:/ ....

它通過默認包slf4j看來我的雲平臺,我得到這個錯誤,因爲我也把slf4j作爲依賴在我的pom文件和兩個不同的類加載器正在加載slf4j

我解決這個問題的方式是改變在POM依賴項的範圍提供。

但副作用是我無法在我的本地tomcat上運行它,因爲它找不到slf4j庫。

在這種情況下可以做些什麼,這樣我的戰爭在我的雲平臺和我的本地tomcat上運行良好?

回答

0

你可以在你的pom.xml中使用不同的配置文件。

舉例SAP雲平臺:

<profiles> 
     <profile> 
      <id>local</id> 
      <properties> 
       <packaging.type>jar</packaging.type> 
      </properties> 
      <activation> 
       <activeByDefault>true</activeByDefault> 
      </activation> 
      <dependencies> 
       <dependency> 
        <groupId>com.h2database</groupId> 
        <artifactId>h2</artifactId> 
       </dependency> 
      </dependencies> 
     </profile> 
    <profile> 
     <id>scp</id> 
     <properties> 
      <packaging.type>war</packaging.type> 
     </properties> 
     <build> 
      <finalName>LoraConnector</finalName> 
     </build> 
     <activation> 
      <activeByDefault>false</activeByDefault> 
     </activation> 
     <dependencies> 
      <dependency> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-logging</artifactId> 
       <scope>provided</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-api</artifactId> 
       <scope>provided</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.slf4j</groupId> 
       <artifactId>jul-to-slf4j</artifactId> 
       <scope>provided</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-tomcat</artifactId> 
       <scope>provided</scope> 
      </dependency> 
      <dependency> 
       <groupId>com.h2database</groupId> 
       <artifactId>h2</artifactId> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 
    </profile> 
</profiles> 

您可以在Eclipse中使用 「運行配置」 使用配置文件(或其他工具),或者當你建立war文件:

mvn -P scp clean package 
0

如果您使用的是spring-boot-starter-web-1.5.1.RELEASE.jar,那麼您需要排除jul-to-slf4j-1.7.22.jar,jcl-over-slf4j-1.7.22.jar。這兩個jar有衝突slf4j-api。 <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <packagingExcludes> WEB-INF/lib/jcl-over-slf4j-1.7.22.jar,WEB-INF/lib/jul-to-slf4j-1.7.22.jar </packagingExcludes> </configuration> </plugin>