5

spring のような多くのオープン ソース プロジェクトは複数のモジュールで構成されています。これらのモジュールを maven の依存関係として追加する場合、すべての依存関係を明示的に定義するか、推移的な依存関係管理に任せる必要があります。たとえば、次の 2 つのケースのどちらがベスト プラクティスであるかを示します。

ケース 1: 必要な最高レベルの機能を含める

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>

ケース 2: フレームワークの各部分を明示的な依存関係として含める

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>
            .... other dependencies that are transitively resolved by maven
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>

ケース 1 とケース 2 のどちらがベスト プラクティスで、その理由は?

4

2 に答える 2

3

同じ依存関係 (この場合は Spring) を使用する他の依存関係を宣言しているかどうかによって異なります。最上位の依存関係だけが必要な場合は、それを宣言します。推移的な依存関係の特定のバージョンに依存する他の依存関係を使用している場合は、それを明示的な依存関係として宣言します。

例としてSpringを使用する: 宣言spring-webmvcした後で別のSpringパッケージが必要だと判断した場合、たとえばspring-security.事業。

基本的に、特定のバージョンが必要なものを宣言し、バージョンを除外するか、特定のバージョンを宣言する必要があるまで、残りは maven に任せます。これは maven が行うように構築されているため、間違った決定を下すまで依存関係を管理させます。

于 2012-10-21T06:08:54.257 に答える
1

公式ドキュメントspring-webmvcから、すべてのスプリングモジュールに依存していることが明らかなので、#1の方が優れていると思います。

<!--
    Spring MVC for Servlet Environments (depends on spring-core, spring-beans, spring-context, spring-web)
    Define this if you use Spring MVC with a Servlet Container such as Apache Tomcat (org.springframework.web.servlet.*)
-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>${org.springframework.version}</version>
</dependency>

また、 pomを調べて、のすべての依存関係spring-webmvcが同じバージョンに依存して いることを確認することもできます。

したがって、少なくともこのユースケースでは、pomで明示的に宣言する必要はないと思います。

于 2012-10-21T06:22:34.127 に答える