我遇到了一个问题,我编写了一个相当简单的 Spring Boot 应用程序,它使用它的嵌入式 Tomcat 容器运行得很好。现在我必须将它部署到我组织的 Glassfish (v3.1.2) 并遇到臭名昭著的“SLF4J:您的 slf4j 绑定请求的 1.6 版与 [1.5.5, 1.5.6] 不兼容”-错误。我还尝试将相同的应用程序部署到具有相同问题的独立 Tomcat。
免责声明:我绝不是 Maven 和 Spring-Boot 方面的专家;但是我已经用谷歌搜索并进行了实验,直到我脸色发青并且不确定发生了什么。一些指导将不胜感激。
所以我下载了 Spring-Boot 示例应用程序“gs-convert-jar-to-war”(https://github.com/spring-guides/gs-convert-jar-to-war),它部署得很好。
因此,我尝试简单地将 spring-ldap-test 添加到我的依赖项中,但它不会部署。
我的 POM:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-convert-jar-to-war</artifactId>
<version>0.1.0</version>
<packaging>war</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.0.0.RC5</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- <dependency>
<groupId>org.springframework.ldap</groupId>
<artifactId>spring-ldap-test</artifactId>
<version>2.0.1.RELEASE</version>
</dependency> -->
</dependencies>
<properties>
<start-class>hello.Application</start-class>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>http://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>http://repo.spring.io/libs-snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>http://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>http://repo.spring.io/libs-snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
现在,这部署得很好......除了关于容器无法找到一堆我没有使用的东西(Mongo,Spring Batch 等)的奇怪错误。我不确定这些是关于什么的,但该应用程序确实部署了。如果有人知道这些是什么以及如何摆脱它们,我会喜欢反馈!这些错误与此类似:
[#|SEVERE|glassfish3.1.2|类 [com/mongodb/Mongo] 未找到。加载 [ class org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration ]|#] 时出错
不过,就像我说的那样,该应用程序确实可以很好地部署这些错误;这不是我问题的症结所在。
真正的问题是现在我去取消注释 spring-ldap-test 依赖项并尝试再次部署应用程序。然而,这一次没有部署。在尝试部署结束时,我看到了这个错误(为了便于阅读,删除了一些细节):
[#|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|SLF4J: The requested version 1.6 by your slf4j binding is not compatible with [1.5.5, 1.5.6]|#]
那么这里发生了什么?我包含了一个依赖项 Spring-LDAP-Test,突然之间,SLF4J 的一切都变得一团糟,我的应用程序无法部署?
这是我的 Maven 依赖图(针对 SLF 过滤):
localHost:complete butah$ mvn dependency:tree -Dincludes="*slf*"
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building gs-convert-jar-to-war 0.1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ gs-convert-jar-to-war ---
[INFO] org.springframework:gs-convert-jar-to-war:war:0.1.0
[INFO] +- org.springframework.boot:spring-boot-starter-thymeleaf:jar:1.0.0.RC5:compile
[INFO] | +- org.springframework.boot:spring-boot-starter-web:jar:1.0.0.RC5:compile
[INFO] | | \- org.springframework.boot:spring-boot-starter:jar:1.0.0.RC5:compile
[INFO] | | \- org.springframework.boot:spring-boot-starter-logging:jar:1.0.0.RC5:compile
[INFO] | | +- org.slf4j:jul-to-slf4j:jar:1.7.6:compile
[INFO] | | \- org.slf4j:log4j-over-slf4j:jar:1.7.6:compile
[INFO] | \- org.thymeleaf:thymeleaf-spring4:jar:2.1.2.RELEASE:compile
[INFO] | \- org.slf4j:slf4j-api:jar:1.7.6:compile
[INFO] \- org.springframework.ldap:spring-ldap-test:jar:2.0.1.RELEASE:compile
[INFO] \- org.springframework.ldap:spring-ldap-core:jar:2.0.1.RELEASE:compile
[INFO] \- org.springframework.data:spring-data-commons:jar:1.7.1.RELEASE:compile
[INFO] \- org.slf4j:jcl-over-slf4j:jar:1.7.6:compile
注意:我正在尝试将其部署到 GF 的全新库存安装中。我唯一改变的是我确实定义了一些 JNDI 的东西。
根据我的 maven 依赖关系图,1.7.6 中使用的唯一 SLF4J 东西——但我的日志声称混合中有一个 1.5.5/6 版本。这可能来自哪里,我该如何杀死它?我的想法可能是它在 spring-ldap-test 中——但如果是这样,那不应该出现在我的图表中吗?
我不知所措。我希望你们中的一些 Spring-Boot 专家可以帮助我开始我的组织的第一个 Spring-Boot 项目。
:)