防止Flyway Maven插件下载旧的slf4j罐子

时间:2013-01-03 20:28:55

标签: maven intellij-idea flyway

当我运行flyway maven插件时,它最初会下载版本为1.5.6的slf4j jar:

[INFO] ------------------------------------------------------------------------
Downloading: http://repo1.maven.org/maven2/org/slf4j/slf4j-jdk14/1.5.6/slf4j-jdk14-1.5.6.pom
Downloaded: http://repo1.maven.org/maven2/org/slf4j/slf4j-jdk14/1.5.6/slf4j-jdk14-1.5.6.pom (2 KB at 21.3 KB/sec)
Downloading: http://repo1.maven.org/maven2/org/slf4j/slf4j-parent/1.5.6/slf4j-parent-1.5.6.pom
Downloaded: http://repo1.maven.org/maven2/org/slf4j/slf4j-parent/1.5.6/slf4j-parent-1.5.6.pom (8 KB at 154.7 KB/sec)

这对我的Spring网络应用程序造成了严重破坏,因为我正在使用slf4j的1.7.2版本,当我重新启动它时会感到困惑。

我该怎样防止这种情况?我已经尝试在我的pom.xml中添加排除项:

<groupId>com.googlecode.flyway</groupId>
                <artifactId>flyway-maven-plugin</artifactId>
                <version>2.0.3</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>jcl-over-slf4j</artifactId>
                    </exclusion>
                </exclusions>

但这仍然会发生。

更新:当我使用Intellij 12构建时,导致的是以下错误:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/tom/Library/Caches/IntelliJIdea12/tomcat/Unnamed_incrowdnow/work/Catalina/localhost/_/WEB-INF/lib/slf4j-jdk14-1.5.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/tom/Library/Caches/IntelliJIdea12/tomcat/Unnamed_incrowdnow/work/Catalina/localhost/_/WEB-INF/lib/slf4j-simple-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.JDK14LoggerFactory]
SLF4J: The requested version 1.5.6 by your slf4j binding is not compatible with [1.6, 1.7]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.

更新:输出     mvn依赖:tree -Dverbose -Dincludes = org.slf4j

[INFO] \- com.googlecode.flyway:flyway-maven-plugin:jar:2.0.3:compile
[INFO]    \- org.apache.maven:maven-core:jar:2.2.1:compile
[INFO]       +- org.apache.maven.wagon:wagon-webdav-jackrabbit:jar:1.0-beta-6:runtime
[INFO]       |  +- org.apache.jackrabbit:jackrabbit-webdav:jar:1.5.0:runtime
[INFO]       |  |  \- (org.slf4j:slf4j-api:jar:1.5.3:runtime - omitted for conflict with 1.7.2)
[INFO]       |  \- org.slf4j:slf4j-nop:jar:1.5.3:runtime
[INFO]       |     \- (org.slf4j:slf4j-api:jar:1.5.3:runtime - omitted for conflict with 1.7.2)
[INFO]       +- org.slf4j:slf4j-jdk14:jar:1.5.6:runtime
[INFO]       |  \- (org.slf4j:slf4j-api:jar:1.5.6:runtime - omitted for conflict with 1.7.2)
[INFO]       \- (org.slf4j:jcl-over-slf4j:jar:1.5.6:runtime - omitted for conflict with 1.7.2)

TIA,

汤姆

3 个答案:

答案 0 :(得分:1)

Flyway Maven插件2.0.3和Flyway Core 2.0.3都不依赖于slf4j。检查您的依赖项。问题必须来自其他地方。

答案 1 :(得分:0)

我有类似的问题并通过使用flyway-core依赖而不是flyway-maven-plugin依赖来解决它。

答案 2 :(得分:0)

FLyway下载slf4j依赖项,如果您的应用程序使用1.7.x或1.6.x版本,那么您将遇到此问题,因为flyway下载1.5.3版本的slf4j-nop和1.5.6版本的slf4j-jdk14。在eclipse中,您可以在pom.xml的依赖层次结构

下看到这一点

为了摆脱这种情况,请添加以下所有排他性并完成

        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>log4j-over-slf4j</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-nop</artifactId>
            </exclusion>    
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-jdk14</artifactId>
            </exclusion>                
        </exclusions>