1

編集:「逆依存関係分析」は私が検索したもののキーワードだったでしょう-残念ながら私は自分の質問を適切に説明することができませんでした(おそらくこれは標準的なことではないことに関係しています-私は実際に実際のユースケースさえ持っていませんこのため)。

典型的な収束の問題があり、依存関係: ツリーが次のようなことを教えてくれるとします:

[INFO] com.my.group:myProject:jar:1.0.1 [INFO] +- org.not.my.group:a-direct-dependency:jar:1.1:compile [INFO] | \- org.not.my.group:transitive-dependency-A:jar:1.14.0:compile [INFO] \- org.not.my.group:another-direct-dependency:jar:1.1:compile [INFO] \- (org.not.my.group:transitive-dependency-A:jar:1.18.0:compile - omitted for conflict with 1.14.0)

org.not.my.group:a-direct-dependency:jar中央リポジトリ (nexus webgui も利用可能) を分析して、推移的な依存関係に依存しているorg.not.my.group:transitive-dependency-A:jarが 1.14.0 ではなくバージョン 1.18.0の (新しい) バージョンがあるかどうかを調べる方法はありますか?

または一般的な質問:ローカルでこれを使用して見つけるのと同じように、中央リポジトリ (または任意のリモート リポジトリ) を介してアーティファクトに依存している人を見つけることができますか?:

mvn dependency:tree -Dincludes=org.not.my.group:transitive-dependency-A:jar:1.18.0 -Dverbose

さらに明確にするために:上記の(架空の)シナリオでは、3つの「レベル」のソリューションを使用して収束の問題を解決しますが、可能な限り最初のものが選択され、最新のものは「ダーティな修正」です。

1 - バージョンを揃える: 自分の依存関係 - 所有者またはサード パーティ - 直接的または推移的 - 同じアーティファクトXに依存しているが、別のバージョンを定義している場合、できればXの新しいリリースまたはXへのツリー内の依存関係を見つけようとします。残りの依存関係に共通のバージョン。このようにして、コードの変更を適用する必要がある可能性があるため、 Xの「適切なアップグレード」を前提としています。

2 - 依存関係の除外:そのようなアーティファクトが見つからない場合は、この除外を持つ依存関係が新しいバージョンを処理できることを期待して、下位バージョンを除外しようとします。バージョンを適切に指す新しいリリースの保証がないため、これには集中的なテストが必要です-基本的に、「この依存関係はバージョンの別の依存関係でも機能するため、この依存関係の内部設計についてはわかりません」とMavenに伝えます" - コンパイルが機能していても、実行時の問題が発生する可能性があります。

3 - dependencyManagementを使用します。dependencyManagement を使用すると、エンフォーサー プラグインの特定の収束の問題が「マスク」(非表示/アウトパス) される可能性があるため、これを (私のセットアップの) 解決策とは考えていません .... 収束の問題が発生したと言います。そして、dependencyManagement を使用して解決しました - 後で - 推移的な依存関係の 1 つが変更され、同様の収束の問題が発生し、エンフォーサ プラグインが検出できなくなりました。

補足:私の英語がもっと上達して、そのような特定のトピックについて簡単に説明できるようになればいいのにと思います...そして最終的には皆さんが私をより簡単に理解できるようになります. すでに受け取った情報をありがとう:)

4

2 に答える 2

3

最初に、すでに述べたように、推移的な依存関係に依存する代わりに直接使用される依存関係を定義します。

さらに、このような状況を防ぐためにmaven-enforcer-pluginを使用します。

<project>
  ...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.4</version>
        <executions>
          <execution>
            <id>enforce</id>
            <configuration>
              <rules>
                <dependencyConvergence/>
              </rules>
            </configuration>
            <goals>
              <goal>enforce</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      ...
    </plugins>
  </build>
  ...
</project>
于 2015-02-18T09:55:42.150 に答える
1

多くの場合、私の英語のスキルは十分ではありませんでした-「逆依存関係分析」は、自分自身を明確にするための用語でした-ここで説明されているように、これをアーカイブするプラグインがいくつかありますhttp://tech.finn.no/2013/01 /31/i-wish-i-knew-my-consumers-maven-reverse-dependency/

于 2015-02-23T15:42:10.133 に答える