2.4.11 Maven advanced, transfert de dépendances / conflit / ajustement / exclusion, verrouillage de version, balise de propriétés, projet d'agrégation (sous-module), héritage / agrégation

table des matières

Maven

1. Les bases de Maven (appris)

2. Maven avancé

2.1 Revue des connaissances de base de Maven

2.1.1 Introduction à maven

2.1.2 Type d'entrepôt maven

2.1.3 Commandes couramment utilisées par Maven

2.1.4 Spécification d'écriture de coordonnées Maven

2.2 Transfert de dépendance de Maven

2.2.1 Qu'est-ce que le passage de dépendance

2.2.2 Comment résoudre les conflits de dépendance

2.2.3 S'appuyer sur le principe de la réglementation - le principe de la première déclaration de priorité (compréhension)

2.2.4 S'appuyant sur le principe de l'ajustement - le principe d'avoir le chemin le plus proche en premier

2.2.5 Exclure les dépendances

2.2.6 Verrouillage de version

2.2.7 Utilisation de la balise properties

2.3 Projet d'agrégation Maven (sous-module)

2.3.1 Analyse de la construction du sous-module du projet maven

2.3.2 Héritage du projet maven

2.3.3 Agrégation du projet Maven

2.3.3 Maven Aggregation Project_Building Lagou Education Background Management System


 

Maven

1. Les bases de Maven (appris)

2. Maven avancé

2.1 Revue des connaissances de base de Maven

2.1.1 Introduction à maven

Maven est un outil de gestion de projet dont la fonction principale est d'effectuer la gestion des dépendances et la construction de projets sur des projets Java pendant la phase de développement du projet.

Gestion des dépendances: c'est la gestion des packages jar. En important les coordonnées maven, cela équivaut à importer le package jar dans l'entrepôt dans le projet en cours.

Construction du projet: L'ensemble du processus de nettoyage, de compilation, de test, de reporting, de conditionnement et de déploiement du projet peut être complété avec une seule commande de maven.

 

2.1.2 Type d'entrepôt maven

1. Entrepôt local

2. Entrepôt distant
①maven central entrepôt (adresse: http://repo2.maven.org/maven2/ )
②maven service privé (un entrepôt dans le réseau local de l'entreprise, vous devez le construire vous-même)
③ d'autres entrepôts publics distants (tels que comme entrepôt distant fourni par Apache, adresse: Http://repo.maven.apache.org/maven2/ )

Entrepôt local --- "serveur privé maven ---" entrepôt central maven

 

2.1.3 Commandes couramment utilisées par Maven

clean: clean
compile: compile
test: test
package: package
install: install

 

2.1.4 Spécification d'écriture de coordonnées Maven

 

2.2 Transfert de dépendance de Maven

2.2.1 Qu'est-ce que le passage de dépendance

Dans maven, les dépendances peuvent être transmises, en supposant qu'il existe trois projets, à savoir le projet A, le projet B et le projet C. En supposant que C dépend de B et que B dépend de A, alors nous pouvons facilement conclure que le projet C dépend également de A selon les caractéristiques du projet maven.

Comme le montre la figure ci-dessus, notre projet web dépend directement de spring-webmvc, et spring-webmvc dépend de sping-aop, spring-beans, etc. Le résultat final est que nous dépendons indirectement de spring-aop, spring-beans, etc. dans notre projet web.

Conflit de dépendance

En raison de l'existence d'un phénomène de transfert de dépendance, spring-webmvc dépend de spirng-beans-5.1.5 et spring-aop dépend de spring-beans-5.1.6, mais on constate que spirng-beans-5.1.5 a été ajouté au projet, et nous espérons que spring- beans-5.1.6 rejoindra le projet. Cela crée des conflits de dépendance.

2.2.2 Comment résoudre les conflits de dépendance

1. Utilisez le principe de médiation des dépendances fourni par maven

    La première déclaration est un plus en principe
       chemin récemment, le principe de priorité

2. Éliminez les dépendances

3. Version verrouillée

 

2.2.3 S'appuyer sur le principe de la réglementation - le principe de la première déclaration de priorité (compréhension)

La dépendance est définie dans le fichier pom et la dépendance déclarée en premier prévaudra. En fait, il s'agit de déterminer laquelle des dépendances passées est finalement utilisée selon l'ordre d'importation des coordonnées.


Conclusion: Comme vous pouvez le voir sur la figure ci-dessus, spring-aop et spring-webmvc sont passés spring-beans, mais comme spring-aop est en avant, les derniers spring-beans utilisés sont passés par spring-aop, et spring -The les spring-beans transmis par webmvc sont ignorés.

 

2.2.4 S'appuyant sur le principe de l'ajustement - le principe d'avoir le chemin le plus proche en premier

Résumé: La dépendance directe est supérieure au transfert de dépendance

 

2.2.5 Exclure les dépendances

Vous pouvez utiliser la balise d'exclusions pour exclure les dépendances transmises.

2.2.6 Verrouillage de version

La méthode de verrouillage direct de la version est utilisée pour déterminer la version du package jar dépendant. Une fois la version verrouillée, l'ordre de déclaration de la dépendance ou le chemin de la dépendance n'est pas pris en compte et la version verrouillée prévaut. Cette méthode est souvent utilisé dans le développement des entreprises.

Comment utiliser le verrouillage de version:

Étape 1: verrouiller la version dépendante dans l'onglet dependencyManagement

Étape 2: Déclarez les coordonnées maven qui doivent être importées dans la balise dependencies

①Lock la version dépendante dans l'onglet dependencyManagement

②Déclarez les coordonnées maven qui doivent être importées dans la balise des dépendances

2.2.7 Utilisation de la balise properties

Pratique pour modifier les versions de diverses dépendances associées

<?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 Projet d'agrégation Maven (sous-module)

concept:

Dans la vraie vie, lorsque les constructeurs automobiles produisent des voitures, parce que l'ensemble du processus de production est très compliqué et encombrant, et que la charge de travail est très importante, les fabricants sépareront les pièces de la voiture entière pour produire, et assembleront finalement les pièces produites pour former un voiture complète.

 

 

2.3.1 Analyse de la construction du sous-module du projet maven

Dans le développement de projets d'entreprise, en raison de la grande échelle du projet, de la complexité de l'entreprise et du grand nombre de personnes impliquées, un projet de grande envergure est généralement divisé en N plusieurs petits modules grâce à un fractionnement raisonnable des modules et développé séparément . Et les modules séparés peuvent être réutilisés par d'autres modules très facilement

Division commune de deux manières:
premièrement: se divise sur des modules métier, chacun est divisé en un projet maven, par exemple, un projet est divisé en module utilisateur, définissez
un module unique, un module panier, chaque correspondance de module est un projet maven.
La seconde type: divisé en fonction des couches, telles que la couche de persistance, la couche de gestion, la couche de présentation, etc. Chaque couche correspond à un projet maven

Indépendamment de la méthode de fractionnement ci-dessus, un projet parent est généralement fourni pour extraire certains codes et configurations communs dans le projet parent pour une gestion et une configuration unifiées.

 

2.3.2 Héritage du projet maven

Dans le langage Java, les classes peuvent être héritées. Grâce à l'héritage, les sous-classes peuvent référencer des propriétés et des méthodes non privées dans la classe parent. De même, l'héritage entre projets maven est également possible. Une fois que le sous-projet hérite du projet parent, les dépendances introduites dans le projet parent peuvent être utilisées. Le but de l'héritage est d'éliminer le code en double.

Le projet parent n'écrit généralement pas de code, il n'est utilisé que pour la gestion unifiée des ressources 

 

2.3.3 Agrégation du projet Maven

Dans le fichier pom.xml du projet maven, vous pouvez utiliser des balises pour regrouper d'autres projets maven. Le but de l'agrégation est d'effectuer des opérations unifiées.

Par exemple, il y a plusieurs projets maven après le fractionnement. Si vous voulez empaqueter, vous devez exécuter les commandes d'empaquetage pour chaque projet, ce qui est très fastidieux.

Pour le moment, vous pouvez utiliser la balise <modules> pour regrouper ces projets dans le projet parent maven. Lorsque vous avez besoin de créer un package, vous n'avez besoin d'exécuter la commande d'empaquetage qu'une seule fois dans ce projet, et les projets regroupés sous celui-ci seront regroupés .

 

2.3.3 Maven Aggregation Project_Building Lagou Education Background Management System

La structure globale du projet est la suivante:

1) Lagou_edu_home_parent est le projet parent, et les autres projets sont des sous-projets, tous héritent du projet parent lagu_edu_home_parent

2) Le projet Lagou_edu_home_parent agrège tous ses sous-projets

3) Il existe des dépendances entre les sous-projets:

ssm_domain dépend de ssm_utils

ssm_dao dépend de ssm_domain

ssm_service dépend de ssm_dao

ssm_web dépend de ssm_service

Projet parent

<?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>

Sous-projet

①couche de domaine

<?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>

Couche ②dao

<?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>

③service couche

<?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>

④ couche web

<?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>

Je suppose que tu aimes

Origine blog.csdn.net/chengh1993/article/details/110824395
conseillé
Classement