1. ホーム
  2. maven

依存関係管理および範囲

2023-10-30 08:31:23

質問

私は通常 <dependencyManagement> セクションに parent-project/pom.xml . これは <dependencyManagement> セクションには、このような子モジュールのすべての依存関係の宣言とバージョンが含まれています (つまり、このセクションでは <scope> 要素なし) です。

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
    </dependency>
  </dependencies> 
</dependencyManagement>

すべての子モジュール(つまりmoduleX/pom.xml)で、私は。

  <dependencies>
    <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <scope>test</scope>
    </dependency>
  </dependencies> 

明らかに、この例では、私は繰り返し <scope>test</scope> を同じ依存関係に対して複数回繰り返しています(junitを必要とするすべての子モジュールで1回)。

私の質問は

に関するベストプラクティスは何ですか? <scope> 宣言に関するベストプラクティスは何ですか?

に入れた方がいいのでしょうか? <dependencyManagement> ?

それとも <dependencies> セクションに置いたほうがいいのでしょうか?また、その理由は?

この質問に対する決定的な回答はあるのでしょうか?

どのように解決するのですか?

少し遅ればせながら、私の意見を述べさせていただきます。

私は最近、非常にデバッグが困難な問題に遭遇しました。

私は、複数のプロジェクト間で依存関係を管理するための親 pom を持っています。 私は、複数のプロジェクト間で共通するすべての依存関係を設定し、以下のものを含んでいました。 groupId , artifactId , version というように 最も一般的な scope .

私の考えでは、それに沿っていれば、各プロジェクトの実際の依存関係のセクションにスコープを含める必要はないでしょう。 最も一般的な scope .

問題は、これらの依存関係のいくつかが推移的依存関係として表示されたときに発生しました。 たとえば、次のような場合です。

  • A はコンパイル スコープで B に依存します。
  • B はコンパイル時に C に依存します。
  • C は dependencyManagement の親に提供されます。

とすると、AのCに対する推移的依存関係は、提供されると判断されます。 意味があるのかないのかよく分かりませんが、確かに紛らわしいですね。

とにかく、手間を省くために scope の外に dependencyManagement .