2.4.11 Maven avanzado, transferencia de dependencia / conflicto / ajuste / exclusión, bloqueo de versión, etiqueta de propiedades, proyecto de agregación (submódulo), herencia / agregación

Tabla de contenido

Maven

1. Conceptos básicos de Maven (aprendidos)

2. Maven avanzado

2.1 Revisión de los conocimientos básicos de Maven

2.1.1 Introducción a maven

2.1.2 tipo de almacén maven

2.1.3 Comandos de uso común de Maven

2.1.4 Especificación de escritura de coordenadas de Maven

2.2 Transferencia de dependencia de Maven

2.2.1 ¿Qué es la transferencia de dependencia?

2.2.2 Cómo resolver conflictos de dependencia

2.2.3 Basándose en el principio de regulación: el principio de primera declaración de prioridad (entendimiento)

2.2.4 Confiar en el principio de ajuste: el principio de tener primero el camino más cercano

2.2.5 Excluir dependencias

2.2.6 Bloqueo de versión

2.2.7 Uso de etiqueta de propiedades

2.3 Proyecto de agregación Maven (submódulo)

2.3.1 Análisis de la construcción del submódulo del proyecto maven

2.3.2 Herencia del proyecto maven

2.3.3 Agregación de proyectos Maven

2.3.3 Maven Aggregation Project_Building Lagou Education Background Management System


 

Maven

1. Conceptos básicos de Maven (aprendidos)

2. Maven avanzado

2.1 Revisión de los conocimientos básicos de Maven

2.1.1 Introducción a maven

Maven es una herramienta de gestión de proyectos cuya función principal es realizar la gestión de dependencias y la construcción de proyectos en proyectos Java durante la fase de desarrollo del proyecto.

Gestión de dependencias: es la gestión de paquetes jar. Al importar las coordenadas de maven, equivale a importar el paquete jar en el almacén al proyecto actual.

Construcción del proyecto: todo el proceso de limpieza, compilación, pruebas, informes, empaquetado y despliegue del proyecto se puede completar con un comando de maven.

 

2.1.2 tipo de almacén maven

1. Almacén local

2. Almacén remoto
①maven central warehouse (dirección: http://repo2.maven.org/maven2/ )
②maven private service (un almacén en la red de área local de la empresa, debe construirlo usted mismo)
③ otros almacenes públicos remotos (como como el almacén remoto proporcionado por Apache, dirección: Http://repo.maven.apache.org/maven2/ )

Almacén local --- "servidor privado maven ---" almacén central maven

 

2.1.3 Comandos de uso común de Maven

clean: clean
compilar: compilar
prueba: prueba
paquete: paquete
instalar: instalar

 

2.1.4 Especificación de escritura de coordenadas de Maven

 

2.2 Transferencia de dependencia de Maven

2.2.1 ¿Qué es la transferencia de dependencia?

En maven, las dependencias se pueden pasar, asumiendo que hay tres proyectos, a saber, proyecto A, proyecto B y proyecto C. Suponiendo que C depende de B y B depende de A, entonces podemos fácilmente concluir que el proyecto C también depende de A según las características del proyecto maven.

Como se puede ver en la figura anterior, nuestro proyecto web depende directamente de spring-webmvc, y spring-webmvc depende de sping-aop, spring-beans, etc. El resultado final es que dependemos indirectamente de spring-aop, spring-beans, etc. en nuestro proyecto web.

Conflicto de dependencia

Debido a la existencia del fenómeno de transferencia de dependencia, spring-webmvc depende de spirng-beans-5.1.5 y spring-aop depende de spring-beans-5.1.6, pero se encuentra que se ha agregado spirng-beans-5.1.5 al proyecto, y esperamos que spring-beans-5.1.6 se una al proyecto. Esto crea conflictos de dependencia.

2.2.2 Cómo resolver conflictos de dependencia

1. Utilice el principio de mediación de dependencia proporcionado por maven

    La primera declaración es una ventaja en principio
       camino recientemente, el principio de prioridad

2. Eliminar dependencias

3. Versión bloqueada

 

2.2.3 Basándose en el principio de regulación: el principio de primera declaración de prioridad (entendimiento)

La dependencia se define en el archivo pom y prevalecerá la dependencia declarada en primer lugar. De hecho, se trata de determinar cuál de las dependencias pasadas se utiliza en última instancia según el orden de importación de coordenadas.


Conclusión: como puede ver en la figura anterior, spring-aop y spring-webmvc se pasan spring-beans, pero debido a que spring-aop está al frente, los spring-beans finales utilizados se pasan por spring-aop y spring -The Los spring-beans pasados ​​por webmvc se ignoran.

 

2.2.4 Confiar en el principio de ajuste: el principio de tener primero el camino más cercano

Resumen: la dependencia directa es mayor que la transferencia de dependencia

 

2.2.5 Excluir dependencias

Puede utilizar la etiqueta de exclusiones para excluir las dependencias pasadas.

2.2.6 Bloqueo de versión

El método de bloquear directamente la versión se utiliza para determinar la versión del paquete jar dependiente. Una vez que se bloquea la versión, no se considera el orden de declaración de la dependencia o la ruta de la dependencia y prevalecerá la versión bloqueada. Este método se utiliza a menudo en el desarrollo empresarial.

Cómo utilizar el bloqueo de versión:

Paso 1: Bloquear la versión dependiente en la pestaña Gestión de dependencias

Paso 2: declare las coordenadas de maven que deben importarse en la etiqueta de dependencias

① Bloquear la versión dependiente en la pestaña Gestión de dependencias

② Declare las coordenadas de Maven que deben importarse en la etiqueta de dependencias

2.2.7 Uso de etiqueta de propiedades

Conveniente para modificar las versiones de varias dependencias relacionadas

<?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 Proyecto de agregación Maven (submódulo)

concepto:

En la vida real, cuando los fabricantes de automóviles producen automóviles, debido a que todo el proceso de producción es muy complicado y engorroso, y la carga de trabajo es muy grande, los fabricantes separarán las partes de todo el automóvil para producir y finalmente ensamblarán las partes producidas para formar un Unidad. Coche completo.

 

 

2.3.1 Análisis de la construcción del submódulo del proyecto maven

En el desarrollo de proyectos empresariales, debido a la gran escala del proyecto, la complejidad del negocio y la gran cantidad de personas involucradas, un proyecto a gran escala generalmente se divide en N múltiples módulos pequeños mediante una división razonable de módulos y se desarrolla por separado. . Y los módulos divididos pueden ser reutilizados por otros módulos muy fácilmente

División común de dos maneras:
primero: divisiones en módulos comerciales, cada división en un proyecto maven, por ejemplo, un proyecto se divide en módulo de usuario, establece
un módulo único, módulo de carrito de compras, cada correspondencia de módulo es un proyecto maven.
El segundo tipo: dividir según capas, como capa de persistencia, capa de negocios, capa de presentación, etc. Cada capa corresponde a un proyecto de maven

Independientemente del método de división anterior, generalmente se proporciona un proyecto principal para extraer algunos códigos y configuraciones comunes en el proyecto principal para una administración y configuración unificadas.

 

2.3.2 Herencia del proyecto maven

En el lenguaje Java, las clases se pueden heredar. A través de la herencia, las subclases pueden hacer referencia a propiedades y métodos no privados en la clase principal. De manera similar, la herencia entre proyectos maven también es posible. Después de que el subproyecto hereda el proyecto principal, se pueden usar las dependencias introducidas en el proyecto principal. El propósito de la herencia es eliminar el código duplicado.

El proyecto principal generalmente no escribe código, solo se usa para la gestión unificada de recursos 

 

2.3.3 Agregación de proyectos Maven

En el archivo pom.xml del proyecto maven, puede usar etiquetas para agregar otros proyectos maven juntos. El propósito de la agregación es realizar operaciones unificadas.

Por ejemplo, hay varios proyectos de maven después de la división. Si desea empaquetar, debe ejecutar los comandos de empaquetado para cada proyecto, lo cual es muy engorroso.

En este momento, puede usar la etiqueta <modules> para agregar estos proyectos en el proyecto principal de maven. Cuando necesite empaquetar, solo necesita ejecutar el comando de empaquetado una vez en este proyecto, y los proyectos agregados debajo de él serán empaquetados .

 

2.3.3 Maven Aggregation Project_Building Lagou Education Background Management System

La estructura general del proyecto es la siguiente:

1) Lagou_edu_home_parent es el proyecto principal, y los otros proyectos son subproyectos, todos heredan el proyecto principal lagu_edu_home_parent

2) El proyecto Lagou_edu_home_parent agrega todos sus subproyectos

3) Existen dependencias entre subproyectos:

ssm_domain depende de ssm_utils

ssm_dao depende de ssm_domain

ssm_service depende de ssm_dao

ssm_web depende de ssm_service

Proyecto padre

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

Subproyecto

Capa de dominio

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

Capa ②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>

Capa de servicio

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

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

Supongo que te gusta

Origin blog.csdn.net/chengh1993/article/details/110824395
Recomendado
Clasificación