2017-02-10 7 views
0

でgradleに矛盾しています。私たちは、storm 1.0.1とelasticsearch 5.2でgradleのsl4jバージョンの競合に直面しています。sl4jのバージョンは、Storm 1.0.1とelasticsearch 5.2

ElasticSearchはlog4j-to-slf4jブリッジが必要なので、希望のロガーを使用できることがわかりました。 ここでは、logback-classicをslf4jで使用しようとしています。

依存関係は以下のように定義されています。私は嵐のコアからSLF4Jを除外すると、以下のように後で同じを追加しようとしましたこれを解決するには

dependencies { 
    compile 'org.slf4j:slf4j-api:1.7.21' 
    compile 'org.apache.logging.log4j:log4j-to-slf4j:2.6.2' 
    compile 'ch.qos.logback:logback-classic:1.1.10' 
    provided ('org.apache.storm:storm-core:1.0.1') { 
     exclude(group: 'org.slf4j', module: 'slf4j-api') 
    } 
    compile 'org.elasticsearch:elasticsearch:5.2.0' 
    compile 'org.elasticsearch.client:x-pack-transport:5.2.0' 
} 

configurations.all { 
    resolutionStrategy { 
     eachDependency { DependencyResolveDetails dependencyResolveDetails -> 
      final requestedDependency = dependencyResolveDetails.requested 
      if (requestedDependency.group == 'org.slf4j' && requestedDependency.name == 'slf4j-api') { 
       requestedDependency.setVersion "1.7.7" 
      } 
     } 
    } 
} 

しかし、トポロジーがあるときエラーが表示されました。 SLF4J:クラスパスには複数のSLF4Jバインディングが含まれています。 SLF4J:[jar:file:/Users/gauthamr05/Documents/Apps/Storm/apache-storm-1.0.1/lib/log4j-slf4j-impl-2.1.jar!/ org/slf4j/impl/StaticLoggerBinderのバインディングが見つかりました。 .class] SLF4J:[jar:file:/Users/gauthamr05/Documents/workspace/xyz_app/build/libs/FullIndexing.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J:http://www.slf4j.org/codes.html#multiple_bindingsを参照してください。説明。 SLF4J:org.apache.logging.log4j.spi.LoggerRegistry.getOrCreateInnerMapにおけるによってjava.lang.StackOverflowError 実際の結合は、タイプのものである[org.apache.logging.slf4j.Log4jLoggerFactory]スレッド内 例外 "メイン"(LoggerRegistry.java :140) at org.apache.logging.log4j.spi.LoggerRegistry.hasLogger(LoggerRegistry.java:154) at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:38) at org.apache .logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:37) at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:29) at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger (AbstractLoggerAdapter.java:47) at org.apache.logging.slf4j.Log4jLogg erFactory.getLogger org.slf4j.LoggerFactory.getLoggerで(Log4jLoggerFactory.java:29) (LoggerFactory.java:277)

答えて

0

例外状態として、StaticLoggerBinder.classを含む二つの瓶があります。

  • /Users/gauthamr05/Documents/Apps/Storm/apache-storm-1.0.1/lib/log4j-slf4j-impl-2.1.jar
  • /ユーザ/ gauthamr05 /ドキュメント/ワークスペース/ xyz_app /ビルド/ libs/FullIndexing.jar

質問:xyz_app/build/libs/FullIndexing.jarは自分のプロジェクトの1つですか?

自分の瓶であれば、私はここで少し推測していますが、私はorg/slf4j/impl/StaticLoggerBinder.javaがあなたのクラスパス上の瓶の中に入っていると推測しています。あなたのクラスパス上のjarファイルにある.javaのファイルをコンパイルする場合、デフォルトのjavacのwierdがあります。これは

compileJava.options.compilerArgs << '-implicit:none' 

でオフにすることができherehere

0

が最終的な瓶の中のlog4jクラスをシャドウする方法を発見参照してください。続き

が構成されている:

apply plugin: 'com.github.johnrengelman.shadow' 

subprojects { 
    shadowJar 
} 

dependencies { 
    compile 'org.slf4j:slf4j-api:1.7.22' 
    compile 'ch.qos.logback:logback-classic:1.1.10' 

    compileOnly("org.apache.storm:storm-core:1.0.1") { 
     exclude module: "log4j-slf4j-impl" 
     exclude module: "slf4j-api" 
     exclude module: "log4j-to-slf4j" 
    } 

    // ElasticSearch and X-Pack 
    compile 'org.elasticsearch:elasticsearch:5.2.0' 
    compile 'org.elasticsearch.client:x-pack-transport:5.2.0' 

    compile 'org.apache.logging.log4j:log4j-api:2.7' 
    compile 'org.apache.logging.log4j:log4j-core:2.7' 
} 

shadowJar { 
    relocate 'org.apache.logging.log4j', 'gautham.elasticsearch.org.apache.logging.log4j' 

    zip64 true 
    transform(ServiceFileTransformer) { 
     path = 'META-INF/vesta*' 
    } 

    manifest { 
     attributes 'Implementation-Title': 'Storm Topology', 
      'Implementation-Version': 1.0, 
      'Main-Class': 'com.gautham.topology.StormTopology' 
    } 

    baseName = 'StormTopology' 

    mergeServiceFiles() 

    exclude "META-INF/*.SF" 
    exclude 'META-INF/*.DSA' 
    exclude 'META-INF/*.RSA' 
    exclude "LICENSE*" 
} 
関連する問題