10

私は次のような依存関係を持っています:

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.2</version>
        <scope>compile</scope>
    </dependency>

httpcore.4.1.4これは、すべてが機能するようにデプロイすると、ClassDefNotFoundをスローする別の依存関係をプルダウンしてhttpcore.4.2います。

次のように両方の依存関係を追加しました。

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.2</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>4.2</version>
        <scope>compile</scope>
    </dependency>

そして、まだ同じ問題に直面しています。つまり、mvnはダウンしhttpcore.4.1.2ませんhttpcore.4.2

どうすればこれを解決できますか?

編集:

追加した;

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.2</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    </dependencyManagement>
4

1 に答える 1

11

推移的な依存関係がある可能性があります。他の依存関係は、不要なバージョンによって異なります。

直接および推移的なすべての依存関係の概要を取得するには、次のことを試してください。

mvn依存関係:ツリー

同じ依存関係の異なるバージョン間でクラッシュを見つけた場合、最初にすべきことは、クラッシュが重大かどうかを判断することです(両方が必要ですか?)そうでない場合は、依存関係の最小バージョンが最大になるようにアップグレードします。推移的な依存関係である場合は、このバージョンをアップグレードすることを検討してください。

依存関係の特定のバージョンにロックオンするだけの場合は、いくつかの選択肢があります。

推移的な依存関係を除外します。

<dependency>
  <groupId>com.something</groupId>
  <artifactId>something</artifactId>
  <exclusions>
    <exclusion>
      <groupId>com.somethingElse</groupId>
      <artifactId>somethingElse</artifactId>
    </exclusion>
  </exclusions>
</dependency>

特定のバージョンを含める:

<dependency>
  <groupId>com.somethingElse</groupId>
  <artifactId>somethingElse</artifactId>
  <version>2.0</version>
</dependency>

pomに明示的に追加された依存関係のバージョンは、同じgroupId/artifactIdの推移的な依存関係のバージョンをオーバーライドします。

少しパズルですが、依存関係の互換性のあるバージョン、つまり同じバージョンの推移的な依存関係を持つバージョンを取得するようにしてください。

于 2012-11-29T21:52:10.233 に答える