2.4.11 Mavenアドバンスト、依存関係の転送/競合/調整/除外、バージョンロック、プロパティタグ、集約プロジェクト(サブモジュール)、継承/集約

目次

Maven

1. Mavenの基本(学習済み)

2.Mavenアドバンス

2.1Mavenの基本的な知識のレビュー

2.1.1Mavenの概要

2.1.2Mavenウェアハウスタイプ

2.1.3Mavenで一般的に使用されるコマンド

2.1.4Maven座標書き込み仕様

2.2Mavenの依存関係の転送

2.2.1依存関係の受け渡しとは

2.2.2依存関係の競合を解決する方法

2.2.3規制の原則に依存する-最初に優先順位を宣言する原則(理解)

2.2.4調整の原則に依存する-最も近いパスを最初に持つという原則

2.2.5依存関係を除外する

2.2.6バージョンロック

2.2.7プロパティタグの使用

2.3 Maven集約プロジェクト(サブモジュール)

2.3.1Mavenプロジェクトのサブモジュール構築の分析

2.3.2Mavenプロジェクトの継承

2.3.3Mavenプロジェクトの集約

2.3.3 Maven Aggregation Project_Building LagouEducationバックグラウンド管理システム


 

Maven

1. Mavenの基本(学習済み)

2.Mavenアドバンス

2.1Mavenの基本的な知識のレビュー

2.1.1Mavenの概要

Mavenはプロジェクト管理ツールであり、その主な機能は、プロジェクト開発フェーズでJavaプロジェクトの依存関係管理とプロジェクト構築を実行することです。

依存関係の管理:jarパッケージの管理です。Maven座標をインポートすることは、ウェアハウス内のjarパッケージを現在のプロジェクトにインポートすることと同じです。

プロジェクトの構築:プロジェクトのクリーニング、コンパイル、テスト、レポート、パッケージ化、および展開の全プロセスは、Mavenの1つのコマンドで完了することができます。

 

2.1.2Mavenウェアハウスタイプ

1.地元の倉庫

2.リモートウェアハウス
①maven中央ウェアハウス(アドレス:http
//repo2.maven.org/maven2/ ②mavenプライベートサービス(会社のローカルエリアネットワーク内のウェアハウス、自分で構築する必要があります)
③その他のパブリックリモートウェアハウス( Apacheによって提供されるリモートウェアハウスとして、アドレス:Http//repo.maven.apache.org/maven2/

ローカルウェアハウス--- "Mavenプライベートサーバー---" Mavenセントラルウェアハウス

 

2.1.3Mavenで一般的に使用されるコマンド

クリーン:クリーン
コンパイル:コンパイル
テスト:テスト
パッケージ:パッケージ
インストール:インストール

 

2.1.4Maven座標書き込み仕様

 

2.2Mavenの依存関係の転送

2.2.1依存関係の受け渡しとは

Mavenでは、プロジェクトA、プロジェクトB、プロジェクトCの3つのプロジェクトがあると仮定して、依存関係を渡すことができます。CがBに依存し、BがAに依存していると仮定すると、Mavenプロジェクトの特性から、プロジェクトCもAに依存していると簡単に結論付けることができます。

上の図からわかるように、私たちのWebプロジェクトはspring-webmvcに直接依存しており、spring-webmvcはsping-aop、spring-beansなどに依存しています。その結果、Webプロジェクトでは間接的にspring-aop、spring-beansなどに依存しています。

依存関係の競合

依存関係の転送現象が存在するため、spring-webmvcはspirng-beans-5.1.5に依存し、spring-aopはspring-beans-5.1.6に依存しますが、spirng-beans-5.1.5が追加されていることがわかります。プロジェクトに参加し、spring-beans-5.1.6がプロジェクトに参加することを願っています。これにより、依存関係の競合が発生します。

2.2.2依存関係の競合を解決する方法

1.Mavenが提供する依存関係メディエーションの原則を使用します

    最初のステートメントは、
       最近の原則としてプラスであり、優先順位の原則です

2.依存関係を排除します

3.ロックされたバージョン

 

2.2.3規制の原則に依存する-最初に優先順位を宣言する原則(理解)

依存関係はpomファイルで定義され、最初に宣言された依存関係が優先されます。実際、座標のインポートの順序に従って、渡された依存関係のどれが最終的に使用されるかを決定することです。


結論:上の図からわかるように、spring-aopとspring-webmvcはspring-beansを通過しますが、spring-aopが前面にあるため、最後に使用されるspring-beansはspring-aopとspring-Theを通過します。 webmvcによって渡されたspring-beanは無視されます。

 

2.2.4調整の原則に依存する-最も近いパスを最初に持つという原則

要約:直接依存は依存転送よりも大きい

 

2.2.5依存関係を除外する

除外タグを使用して、渡された依存関係を除外できます。

2.2.6バージョンロック

バージョンを直接ロックする方法を使用して、依存するjarパッケージのバージョンを判別します。バージョンがロックされた後は、依存関係の宣言順序または依存関係のパスは考慮されず、ロックされたバージョンが優先されます。この方法が優先されます。エンタープライズ開発でよく使用されます。

バージョンロックの使用方法:

手順1:dependencyManagementタブで依存バージョンをロックする

ステップ2:依存関係タグにインポートする必要があるMaven座標を宣言します

①依存関係管理タブで依存バージョンをロックする

②依存関係タグにインポートする必要のあるMaven座標を宣言します

2.2.7プロパティタグの使用

関連するさまざまな依存関係のバージョンを変更するのに便利

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.lagou</groupId>  
  <artifactId>maven_advanced</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <packaging>war</packaging>

  <!--抽取版本号, 以后修改方便-->
  <properties> 
    <spring.version>5.1.7.RELEASE</spring.version> 
  </properties>

  <!--锁定jar包版本-->  
  <dependencyManagement> 
    <dependencies> 
      <dependency> 
        <groupId>org.springframework</groupId>  
        <artifactId>spring-beans</artifactId>  
        <version>${spring.version}</version> 
      </dependency>  
      <dependency> 
        <groupId>org.springframework</groupId>  
        <artifactId>spring-context</artifactId>  
        <version>${spring.version}</version> 
      </dependency> 
    </dependencies> 
  </dependencyManagement>  
  <dependencies> 
    <!--  &lt;!&ndash;spring mvc&ndash;&gt;
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-webmvc</artifactId>
              <version>5.1.5.RELEASE</version>
              <exclusions>
                  <exclusion>
                      <groupId>org.springframework</groupId>
                      <artifactId>spring-beans</artifactId>
                  </exclusion>
              </exclusions>

          </dependency>

          &lt;!&ndash;spring aop&ndash;&gt;
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-aop</artifactId>
              <version>5.1.6.RELEASE</version>
          </dependency>-->

    <!--下面不用配置版本号, 因为上面已经锁定了-->
    <dependency> 
      <groupId>org.springframework</groupId>  
      <artifactId>spring-beans</artifactId> 
    </dependency> 
  </dependencies> 
</project>

 

 

2.3 Maven集約プロジェクト(サブモジュール)

概念:

実生活では、自動車メーカーが自動車を生産する場合、製造工程全体が非常に複雑で煩雑であり、作業負荷が非常に大きいため、自動車メーカーは自動車全体の部品を分離して製造し、最終的に製造部品を組み立ててユニット。完全な車。

 

 

2.3.1Mavenプロジェクトのサブモジュール構築の分析

エンタープライズプロジェクトの開発では、プロジェクトの大規模さ、ビジネスの複雑さ、および関係者の数が多いため、大規模プロジェクトは通常、合理的なモジュール分割によってN個の複数の小さなモジュールに分割され、個別に開発されます。 。また、分割されたモジュールは他のモジュールで非常に簡単に再利用できます

2つの方法で共通の分割:
最初:ビジネス・モジュールに分割、Mavenプロジェクトに各分割は、例えば、プロジェクトが設定され、ユーザモジュールに分割して
カートモジュールショッピング、単一のモジュールを、各モジュールの対応は、Mavenのプロジェクトがある。
第二タイプ:永続化レイヤー、ビジネスレイヤー、プレゼンテーションレイヤーなどのレイヤーに従って分割します。各レイヤーはMavenプロジェクトに対応します。

上記の分割方法に関係なく、親プロジェクトは通常、いくつかの一般的なコードと構成を親プロジェクトに抽出して、管理と構成を統合するために提供されます。

 

2.3.2Mavenプロジェクトの継承

Java言語では、クラスを継承できます。継承を通じて、サブクラスは親クラスの非プライベートプロパティとメソッドを参照できます。同様に、Mavenプロジェクト間の継承も可能です。サブプロジェクトが親プロジェクトを継承した後、親プロジェクトで導入された依存関係を使用できます。継承の目的は、重複するコードを排除することです。

親プロジェクトは通常、コードを記述せず、統合されたリソース管理にのみ使用されます 

 

2.3.3Mavenプロジェクトの集約

Mavenプロジェクトのpom.xmlファイルでは、タグを使用して他のMavenプロジェクトをまとめて集約できます。集約の目的は、統合された操作を実行することです。

たとえば、分割後に複数のMavenプロジェクトがあります。パッケージ化する場合は、プロジェクトごとにパッケージ化コマンドを実行する必要があり、非常に面倒です。

このとき、<modules>タグを使用して、これらのプロジェクトをMaven親プロジェクトに集約できます。パッケージ化する必要がある場合は、このプロジェクトでpackagesコマンドを1回実行するだけで、その下に集約されたプロジェクトがパッケージ化されます。 。

 

2.3.3 Maven Aggregation Project_Building LagouEducationバックグラウンド管理システム

プロジェクトの全体的な構造は次のとおりです。

1)Lagou_edu_home_parentは親プロジェクトであり、他のプロジェクトはサブプロジェクトであり、すべて親プロジェクトlagu_edu_home_parentを継承します

2)Lagou_edu_home_parentプロジェクトは、そのすべてのサブプロジェクトを集約します

3)サブプロジェクト間には依存関係があります。

ssm_domainはssm_utilsに依存します

ssm_daoはssm_domainに依存します

ssm_serviceはssm_daoに依存します

ssm_webはssm_serviceに依存します

親プロジェクト

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.lagou</groupId>
    <artifactId>maven-parent</artifactId>
    <!--pom打包类型-->
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <!--聚合所有工程-->
    <modules>
        <module>maven-domain</module>
        <module>maven_dao</module>
        <module>maven-service</module>
        <module>maven-web</module>
    </modules>
</project>

サブプロジェクト

①ドメイン層

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <!--代表本工程的父工程-->
    <parent>
        <artifactId>maven-parent</artifactId>
        <groupId>com.lagou</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven-domain</artifactId>
    
</project>

②ダオ層

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <!--代表本工程的父工程-->
    <parent>
        <artifactId>maven-parent</artifactId>
        <groupId>com.lagou</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven_dao</artifactId>

    <!--引入domain层的依赖-->
    <dependencies>
        <dependency>
            <groupId>com.lagou</groupId>
            <artifactId>maven-domain</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

③サービス層

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <!--代表本工程的父工程-->
    <parent>
        <artifactId>maven-parent</artifactId>
        <groupId>com.lagou</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven-service</artifactId>

    <!--引入dao层的依赖-->
    <dependencies>
        <dependency>
            <groupId>com.lagou</groupId>
            <artifactId>maven_dao</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

④ウェブレイヤー

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  

  <!--代表本工程的父工程-->
  <parent> 
    <artifactId>maven-parent</artifactId>  
    <groupId>com.lagou</groupId>  
    <version>1.0-SNAPSHOT</version> 
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <artifactId>maven-web</artifactId>
  <packaging>war</packaging>

  <!--引入service层的依赖-->
  <dependencies>
    <dependency>
      <groupId>com.lagou</groupId>
      <artifactId>maven-service</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
  </dependencies>
</project>

おすすめ

転載: blog.csdn.net/chengh1993/article/details/110824395