2017-12-13 27 views
0

今はmavenプロジェクトを使用しています。このプロジェクトではlogging.1.jarを使用しています。このプロジェクトに追加する新しい機能があり、logging.3.jarに依存しています。mavenのjarファイルの競合

コンパイルは正常ですが、実行時にjarファイルの競合が原因でアプリケーションに障害が発生しています。

理由は、私が新たlogging.3.jarに依存することなどの機能を追加された存在するクラスを初期化することができない代わりに、logging.3.jar

logging.1.jarを使用して、新しく追加された機能です。どのように解決することができますか?

URLClassLoaderを使用して解決しますか?

+0

jarファイルを削除し、依存関係のダウンロードを再実行しますか? – Shane

+0

もしあなたがあなたのポンを提供するなら、それは簡単に答えることができます。既にMavenの除外をチェックしましたか? – pirho

+0

@pirhoここには、同じjarファイルの2つの異なるバージョンがあります。新しい機能が動作するためには、より新しいバージョンの(新しい)jarファイルに依存するクラスを初期化する必要があります。しかし、実行時には、常により低いバージョンのjar(既存のjar)を探しています。私は2つのjarファイルで作業する必要があります。どのように私はこれを解決することができます。 – RamhaKrishna

答えて

0

pom.xmlに適切なjar依存関係を追加し、mvn clean-install -Uコマンドを実行します。このコマンドは矛盾を取り除き、正しく更新します。

0

依存性の除外Maven introductionを参照してください。

あなたのポンポンでこのような何かを持っている必要がありますので:

<dependencies> 
    ... 
    <dependency> 
     <groupId>org.examle</groupId> 
     <artifactId>including-jar</artifactId> 
     <version>1.0.0</version> 
     <exclusions> 
     <exclusion> <!-- declare the exclusion here --> 
      <groupId>org.logging</groupId> 
      <artifactId>logging</artifactId> (or logging1) 
     </exclusion> 
     </exclusions> 
    </dependency> 
    ... 
    </dependencies> 

トリッキーな部分は、古いに依存している((S) - jarファイルを含む)アーティファクト(複数可)を見つけなければならないということですこれらのすべての成果物にこの除外を追加します。しかし、この後者の解決策は、すべての状況に合わせて、私ではないかもしれません

<dependencies> 
    ... 
    <dependency> 
     <groupId>org.examle</groupId> 
     <artifactId>logging</artifactId> // or logging1 
     <version>1.0.0</version> 
     <scope>provided</scope> 
    </dependency> 
    ... 
    </dependencies> 

:一方

は、実際にが提供されるように、その範囲を設定することにより、をロードするこの古いアーティファクトを防止することも可能です個人的には、実際の目的を難読化していないので(それを除外して)、後で驚きを引き起こすことはないので、最初を優先します。

関連する問題