7

たとえば、依存関係がある場合:

a -> b
a -> c
b -> c

a -> cがあるので、依存関係を削除したいa -> b -> c

減らすべきではないいくつかの強い依存関係があるかもしれないことは知っていますが、それはこの質問には関係ありません。

例:

In a.pom: 
<dependencies>
    <dependency>b</dependency>
    <dependency>c</dependency>
</dependencies>

In b.pom:
<dependencies>
    <dependency>c</dependency>
</dependencies>

期待される結果:

In a.pom: 
<dependencies>
    <dependency>b</dependency>
</dependencies>
4

3 に答える 3

14

mvn dependency:analyzepom に不要な依存関係があるかどうかを示すために使用します (欠落しているエントリを追加-DoutputXML=trueして、欠落しているエントリを特定することもできます)。

プロジェクトで現在使用mvn dependency:treeされている依存関係と、Maven がそれらを見つけている場所を表示するために使用します。-Dverbose=trueすべての重複と競合を表示するには、追加します。

a に直接依存している場合c(つまり、 のコードが のaクラスに言及している場合c)、pom はそれを反映する必要があります。aが に直接依存している場合のみ、の pom.xml ファイルから依存関係をb安全に削除できます。上記のコマンドにより、適切な次のアクションを判断できるはずです。ca

編集:さて、質問を更新しました。方法は次のとおりです。

  1. プロジェクトaで、実行しますmvn dependency:tree -Dverbose=true。これにより、プロジェクトの Maven によって考慮されるすべての依存関係の完全なツリーが表示されます。
  2. ステップ 1 の出力を見て、1 レベル以上の深さで示されているすべての依存関係のリストを作成します (それらのいくつかはおそらく重複しています)。
  3. 任意のエディターで pom.xml ファイルを編集し、ステップ 2 で作成したリストと一致する依存関係をすべて削除します。

または、それを自動的に行う方法を探していますか? あなたがやろうとしていることはBAD IDEAであるため、自分で作成しない限り、自動化された方法はないと思います。あなたは彼らの異論があなたの質問に「無関係」であると人々に言っていますが、実際には、あなたの質問は「どうすればMavenを使用してMavenをより使いにくくすることができますか?」と尋ねるようなものです.

これを行う正当な理由はありません。正当な理由があると思うなら、何らかの結果を生み出すためにそれをしようとしているに違いありません。あなたの計画は悪いものなので、望ましい結果が得られるように助けを求める必要があります。

于 2010-10-01T08:45:43.473 に答える
13

別の依存関係から無料で入手できるため、すでに満たされている偽の/不要な依存関係を見つけたいと思います。

私はあなたがあなたのpomsをきれいにするためにそれをしたいかもしれないと想像することができます。

ただし、依存関係を明示的に指定することをお勧めするため、通常は実行したいことではありません。

b将来、モジュールが依存関係として削除cされて壊れるかどうかはわかりませんa

于 2010-10-01T22:43:55.193 に答える
2

他のポスターと同様に、あなたが何を達成したいのか正確にはわかりません. あなたが必要としているのは除外かもしれませんか?何らかの理由で依存関係が望ましくない場合は、除外を使用して依存関係を削除できます。

        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>logkit</groupId>
                    <artifactId>logkit</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>avalon-framework</groupId>
                    <artifactId>avalon-framework</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
于 2010-10-01T08:06:25.667 に答える