Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LinkageError-加载程序约束冲突-解析方法时“;org.slf4j.impl.StaticLoggerBinder.getLoggerFactory();_Java_Tomcat_Maven 2_Classloader_Slf4j - Fatal编程技术网

Java LinkageError-加载程序约束冲突-解析方法时“;org.slf4j.impl.StaticLoggerBinder.getLoggerFactory();

Java LinkageError-加载程序约束冲突-解析方法时“;org.slf4j.impl.StaticLoggerBinder.getLoggerFactory();,java,tomcat,maven-2,classloader,slf4j,Java,Tomcat,Maven 2,Classloader,Slf4j,我遇到以下错误: ContextListenerjava.lang.LinkageError:加载程序约束冲突:解析方法时 “org.slf4j.impl.StaticLoggerBinder.getLoggerFactory()Lorg/slf4j/ILoggerFactory;”类加载器“org.apache.catalina.loader”。WebappClassLoader@4d1cc3c3(URL:['],父项:[)'java.net。URLClassLoader@4fccd51b当前

我遇到以下错误:

ContextListenerjava.lang.LinkageError:加载程序约束冲突:解析方法时
“org.slf4j.impl.StaticLoggerBinder.getLoggerFactory()Lorg/slf4j/ILoggerFactory;”类加载器“org.apache.catalina.loader”。WebappClassLoader@4d1cc3c3(URL:['],父项:[)'java.net。URLClassLoader@4fccd51b当前类org/slf4j/LoggerFactory和类加载器系统(URL:[''文件:/usr/lib/jvm/jvm_8/jvm_8/lib/jvmx.jar')的“]),
'文件:/usr/lib/jvm/jvm_8/jvm_8/lib/tools.jar',
'文件:/
....

似乎我的云平台默认包是
slf4j
,我得到了这个错误,因为我也将slf4j作为依赖项放在我的pom文件中,两个不同的类加载器正在加载
slf4j

我解决这个问题的方法是将pom中的依赖范围更改为提供

但副作用是我无法在本地tomcat上运行它,因为它找不到slf4j库


在这种情况下,可以做些什么,使我的war在我的云平台和本地tomcat上都能正常运行?

您可以在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>

如果您使用的是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。
maven war插件2.6
WEB-INF/lib/jcl-over-slf4j-1.7.22.jar,WEB-INF/lib/jul-to-slf4j-1.7.22.jar

mvn -P scp clean package