2016-05-04 14 views
1

私のプロジェクトで矛盾する依存関係に問題があります。特に、そこにSLF4Jロギングの2つの実装です:SLF4J - シンプルでlogback-classicが、私は、実行時にmavenの依存関係を除外する

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/Users/apykhtin/.m2/repository/org/slf4j/slf4j-simple/1.7.19/slf4j-simple-1.7.19.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/Users/apykhtin/.m2/repository/ch/qos/logback/logback-classic/1.1.3/logback-classic-1.1.3.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.SimpleLoggerFactory] 
Exception in thread "main" java.lang.IllegalStateException: Unable to acquire the logger context 
     at io.dropwizard.logging.LoggingUtil.getLoggerContext(LoggingUtil.java:46) 

を取得しています。

logback-classicは私にとっては必須の依存関係です(dropwizardのため)。しかし、slf4j-simpleは実際にはそうではありません。私は自分のプロジェクトから削除したいと思います。それだけでは簡単ではありません。

私の "uber jar"は "small jar"に依存しています。これは "slf4j-simple"に依存しています。ユーバージャーのポンポンで除外を置くことを支援されていません:小さな瓶は「影」されているので

<dependency> 
    <groupId>com.my.unique.group</groupId> 
    <artifactId>small-jar</artifactId> 
    <version>0.1.2-SNAPSHOT</version> 
    <exclusions> 
     <exclusion> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

私は思います。私の "uber-jar"はmaven-shade-pluginを使用していますが、 "small-jar"はそうではありません。 私はまた、SLF4J、簡単な陰影から除外しようとした:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>1.6</version> 
    <configuration> 
    <artifactSet> 
     <excludes> 
      <exclude>org.slf4j:slf4j-simple:jar</exclude> 
     </excludes> 
    </artifactSet> 
    ... 
</plugin> 

も成功せず。 slf4j-simpleはまだ私のuber-jarに含まれています。 これまでの私の開発は、すべて「uber-jar」に関連していました。 「小さな瓶」のコードを変更することは可能ですが、私はそれを避けたいと思います。

私は間違っていますか?

+0

更新:maven-shade-pluginはここでの犯人ではありません。このプラグインを完全にオフにして、まったく同じエラーが発生しました。 – Alexander

+0

更新2:明らかに私の問題は、プロジェクトの誤設定に起因していました。すべて(Mavenリポジトリを含む)をクリアし、新鮮なソースをチェックアウトし、Eclipseでプロジェクトを作成すると、すべてが期待どおりに機能しています。みんなありがとう。 – Alexander

答えて

0

"uber-jar"とはどういう意味ですか?親プロジェクト?

どのような方法あなたは、これが

+0

ありがとう、ヒシャム。 「uber-jar」とは、マスターのトップレベルプロジェクトを意味します。 Curiousli、slf4j-simpleは依存関係ツリーにはありませんが、どうにかしてマスター・ジャーに入ります。 – Alexander

0

なぜ小さな瓶がシェーディングされているのに役立ちます

上記の希望を行ったように、下位のプロジェクトで依存関係を定義し、推移を除外し、それがどこから来るか見るために mvn dependency:tree -Dincludes=:slf4j*を使用?スモールジャーを陰影のないアーチファクトとしてコンパイルするときに、slaven4jの推移的な依存性をmavenに処理させ、あなたの "uber-jar"の小さなジャールに依存するときは、 slf4jとなります)。影付きであれば、依存関係を除外することはできません。なぜなら、小さなジャーのすべてが単一の依存関係であるからです。

小さなジャーを変更しないようにしたいと思っていますが、これは一般にシェーディングの固有の問題の1つです。小さなジャーをまったくシェーディングしないことをお勧めします。あるいは、少なくとも小規模なシェーディングからslf4jを除外して、あなたのウーファージャーの依存関係設定で除外できる通常の推移依存としてそれを処理させてください。

+0

これまで(Mavenのビルドメッセージによると)私は小さな瓶を陰影から除外することができました。しかし、これにより、uber-jarがslf4j-simpleをpullするのを止めることはできませんでした。それは、依存関係の除外として明示的にリストされています。 – Alexander

+0

小瓶は唯一の依存関係にありますか?別の依存関係がそれをもたらす可能性があり、それをグローバルに除外する必要があります。 – alexanderific

関連する問題