0
votes

I am bulding and run Spring web app using gradle. There are multiple bindings. Reading the existing posts, I found lots of similar problems. But I have two problems. (1) I can not find conflict depencies. (2) I am not very fimilar with gradle syntaxt. SO I tried lots of methods. But still confused. Any help is welcome. Thanks. Here is the error:

SLF4J: Class path contains multiple SLF4J bindings.

SLF4j: Found bindings in [jar:file:/C:/myproject/gradle-2.3-all/gradle-2.3/lib/logback-classic-1.0.13.jar!/org/slf4j/impl/StatLoggerBinder.class]

SLF4j: Found bindings in [jar:file:/C:/myproject/myproject/build/temp/tomcatRunWar/work/Tomcat/localhost/myproject/WEB-INF/lib/logback-classic-1.1.2.jar!/org/slf4j/impl/StatLoggerBinder.class]

SLF4j: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

Below is my depencies:

buildscript {
repositories {
    maven { url "http://repo.spring.io/libs-release" }
    mavenLocal()
}
dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.0.1.RELEASE")
    classpath 'org.gradle.api.plugins:gradle-tomcat-plugin:1.2.4'
}} 

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'spring-boot'
apply plugin: 'war'
apply plugin: 'groovy'
apply plugin: 'tomcat'


eclipse {
jdt {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
}}

jar {
baseName = 'myproject'
version =  '0.1.0' }

repositories {
mavenCentral()
maven { url "http://repo.spring.io/libs-release" } }

dependencies {
compile('commons-fileupload:commons-fileupload:1.3.1')
compile("org.codehaus.jackson:jackson-mapper-asl:1.9.0")
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.data:spring-data-mongodb")
compile("org.springframework.security:spring-security-crypto:3.2.3.RELEASE")
compile("com.fasterxml.jackson.core:jackson-databind")
compile("joda-time:joda-time:2.2")
compile("org.apache.directory.studio:org.apache.commons.codec:1.6")
compile('com.amazonaws:aws-java-sdk:1.2.1')
testCompile("junit:junit")
    runtime 'javax.servlet:jstl:1.2'
providedCompile group:"org.apache.tomcat", name:"tomcat-catalina", version:"7.0.47" }


dependencies { 
def tomcatVersion = '7.0.47' 
tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}", 
"org.apache.tomcat.embed:tomcat-embed-logging-log4j:${tomcatVersion}" 
tomcat("org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}") { 
exclude group: 'org.eclipse.jdt.core.compiler', module: 'ecj' 
} }


tomcatRun { daemon = true 
httpPort = 8080
outputFile = file('/logs/tomcat.log')
stopKey = 'ctl-d'
webDefaultXml = file('src/main/webapp/WEB-INF/web.xml')  }

 tomcatRunWar { outputFile = file('/logs/tomcat.log')  }
tomcatStop { stopKey = 'ctl-d'  }
1

1 Answers

2
votes

Start by doing this on the command line:

gradle dependencies > foo.txt

and go get coffee while it completes. The resulting file will contain a full dependency tree. Search for logback.

Then when you're modifying the build file, as far as I can tell (I'm relatively new at gradle too), you only need to exclude either the module or the group, not both. Group is basically the part before the colon, module is the part after.

Looking again at the details of your error, I think the problem is probably contained in here:

"org.apache.tomcat.embed:tomcat-embed-logging-log4j:${tomcatVersion}"

so I think you should probably break that out into its own line/dependency and put the exclude there.