5

pom.xml でデータを定義するときにベスト プラクティスに従おうとしているので、Spring のソース コードを調べ始めたところ、次のことがわかりました。


<project xmlns="http://maven.apache.org/POM/4.0.0"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aop</artifactId>
  <packaging>jar</packaging>
  <version>3.1.1.RELEASE</version>
.....

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${project.version}</version>
      <scope>compile</scope>
</dependency>

---

<dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <scope>test</scope>
</dependency>
-----

ただし、spring-beans も log4j に依存しています。

ベスト プラクティスの方法として、推移的な依存関係にどの程度依存する必要があるか教えてください。

spring-beans がすでにそれを宣言していたので、私の最初の考えは log4j 依存関係を再宣言しないことだったので、私はこれを求めています。

4

2 に答える 2

11

直接インポートして使用するクラスを提供するか、Log4J のように直接使用するサービスを提供するものであるかに関係なく、明示的に依存する依存関係を宣言します。推移的な依存関係は、実行時に必要であるが自分で使用しない依存関係のみを提供する必要があります。

于 2013-03-02T18:05:19.867 に答える
1

これには 2 つの部分があります。

log4j は「test」スコープに対して宣言されており、最終的な出力 (jar/war...) の一部にはなりません。そのため、Spring Bean がテスト (スコープ) で log4j に依存している場合、提供または実行時 (スコープ) に Spring Bean を使用するプロジェクトに推移的な依存関係があることを意味するわけではありません。

依存関係スコープ - これにより、ビルドの現在の段階に適した依存関係のみを含めることができます。... テスト: このスコープは、依存関係がアプリケーションの通常の使用には必要なく、テストのコンパイルおよび実行フェーズでのみ使用できることを示します。(アパッチ)

2 番目の部分:

依存関係のバージョンが指定されていない場合、依存関係を管理するために「他の」pom に依存します。したがって、依存関係は推移的であり、他の人によって管理されます。「依存管理」

依存関係管理 - これにより、プロジェクトの作成者は、推移的な依存関係またはバージョンが指定されていない依存関係に遭遇したときに、使用するアーティファクトのバージョンを直接指定できます。(アパッチ)

Maven Apache 推移的な依存関係

于 2013-03-02T18:50:36.617 に答える