Maven

Maven配置

Maven下载地址

① 解压文件
② 配置环境变量
③ 配置conf -> setting.xml

  • 配置本地仓库地址
  <localRepository>D:\tool\maven\repository</localRepository>
  • 配置国内阿里镜像
	<mirror>
		<id>alimaven</id>
		<name>aliyun maven</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
		<mirrorOf>central</mirrorOf>
	</mirror>
  • 配置JDK17版本项目构建
    <profile>
      <id>jdk-17</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>17</jdk>
      </activation>
      <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
         <maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
      </properties>
    </profile>

配置IDEA

在这里插入图片描述

IDEA构建Maven工程

在这里插入图片描述
在这里插入图片描述

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

    <!--maven坐标-->
    <groupId>com.alive.pro</groupId>
    <artifactId>m1</artifactId>
    <version>1.0</version>
    <!-- 打包方式 -->
    <packaging>jar</packaging>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

在这里插入图片描述

IDEA 构建Maven Java Web工程

方式一

① 创建项目修改打包方式war

<?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.alive.pro</groupId>
    <artifactId>m2</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

② 刷新 Maven
在这里插入图片描述
在这里插入图片描述

方式二

在这里插入图片描述
在这里插入图片描述

方式三

在这里插入图片描述

Maven Web工程部署到Tomcat

安装Tomcat

① 下载压缩包
在这里插入图片描述
Tomcat官网
② 解压文件
③ IDEA配置路径
在这里插入图片描述
在这里插入图片描述

启动Web项目

在这里插入图片描述
在这里插入图片描述

Maven 工程构建

项目的构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。
项目构建是软件开发过程中至关重要的一部分,它能够大大提高软件的开发效率,使得开发人员能够更加专注于应用程序的开发和维护,而不必关心应用程序的构建细节。
同时,项目构建还能将多个开发人员的代码汇合到一起,并能够自动化项目的构建和部署,大大降低了项目的出错风险和提高开发效率。常见的构建工具包括Maven、Gradle、Ant等。
在这里插入图片描述

命令方式项目构建

命令描述
mvn complie编译项目,生成target文件
mvn package打包项目,生成jar或war文件
mvn clean清理编译或者打包后的项目结构
mvn install打包后上传到Maven本地仓库
mvn deploy只打包,上传Maven私服仓库
mvn site生成站点
mvn test执行测试源代码

在这里插入图片描述
注意cmd打开路径

mvn test使用:
类名和方法名要满足命名规范,必须以test开头或者结尾,类名建议以test结尾,方法名建议以test开头

package com.alive;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

/**
 * @Author zyj
 * @Date 2024/10/04 21:30
 * @Description
 */
public class UserTest {
    @Test
    public void testGetUser(){
        int a = 20;
        int b = 20;
        Assertions.assertEquals(a + b,30);
    }
}

测试报告
在这里插入图片描述
mvn package
在这里插入图片描述

  • 解决war包打包插件和JDK版本不匹配
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.2</version>
            </plugin>
        </plugins>
    </build>	
  • 模块m2依赖于m1的jar包
    在这里插入图片描述
    m1 需要执行mvn install 将jar包安装到本地仓库,按照坐标保存到指定位置
  • mvn package(打包)和 mvn install(安装)的区别?
    打包是将工程打成jar或者war文件,保存在target目录下
    安装是将当前工程所生成的jar或war文件,安装到本地仓库,会按照坐标保存到指定位置

通过坐标查找Jar

 <!--maven坐标-->  
  <groupId>com.alive.pro</groupId>  
  <artifactId>m1</artifactId>  
  <version>1.0</version>

在本地仓库中路径D:\tool\maven\repository\com\alive\pro\m1\1.0
可以看到坐标和本地仓库之间的关系
在这里插入图片描述

IDEA可视化构建

在这里插入图片描述

构建插件、命令、生命周期之间的关系

  • 构建生命周期
    我们执行package命令也会自动执行compile命令
    在这里插入图片描述
    这种行为就是因为构建生命周期产生的,构建生命周期可以理解成是一组固定构建命令的有序集合,触发周期后的命令,会自动触发周期前的命令
  • 构建周期作用:简化构建过程
  • 例如:项目打包 mvn clean package即可。
    主要两个构建生命周期
    • 清理周期:主要对项目编译生成文件进行清理
    • 包含命令:clean
    • 默认周期:定义了真正构建时所需执行的所有步骤,它是生命周期中最核心的部分,包含命令:compile - test - package - install - deploy
  • 插件、命令、周期三者关系
    周期 - 包含若干命令 - 包含若干插件;
    使用周期命令构建,简化构建过程
    最终执行构建的是插件

依赖管理

依赖管理概念

Maven 依赖管理是Maven软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题,使得开发人员能够轻松地将其它开发人员开发的模块或第三方框架集成到自己的应用程序或模块中,避免出现版本冲突和依赖缺失等问题。
我们通过定义POM文件,Maven 能够自动解析项目的依赖关系,并通过Maven仓库自动下载和管理依赖,从而避免了手动下载和管理依赖的繁琐工作和可能引发得版本冲突问题。
总之,Maven原来管理是Maven软件的一个核心功能之一,使得软件包依赖的管理和使用更加智能和方便,简化了开发过程中的工作,并提高软件质量和可维护性。

Maven工程核心信息配置和解读(GAVP)

模型版本
<modelVersion>4.0.0</modelVersion>  
公司或组织的唯一标识,并且配置时生成的路径也有由此生成,如com.alive.pro,Maven会将该项目打包成jar包存放的路径/com/alive/pro
<groupId>com.alive.pro</groupId>  
项目的唯一ID,一个groupId下面可能多个项目,依靠artifactId来区分
<artifactId>m1</artifactId> 
版本号
<version>1.0</version>
打包方式:
默认:jar
jar指的是普通的java项目打包方式,项目打成jar包
war指的是web项目打包方式,项目打成war包
<packaging>jar/pom/war</packaging>

Maven工程依赖管理配置

 <!--
 通过编写依赖jar包的gav必要属性,引入第三方依赖,
 scope属性是可选的,可以指定依赖的生效范围
 依赖信息查询方式:
 Maven信息仓库:http://mvnrepository.com/
 mavnesearch插件搜索
 -->
  <dependencies>
<!--    引入具体的依赖包-->
    <dependency> 
      <groupId>org.junit.jupiter</groupId>  
      <artifactId>junit-jupiter-api</artifactId>  
      <version>5.9.2</version>
<!--      依赖范围-->
      <scope>test</scope> 
    </dependency>  
    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency> 
      <groupId>org.projectlombok</groupId>  
      <artifactId>lombok</artifactId>  
      <version>1.18.24</version>  
      <scope>provided</scope> 
    </dependency> 
  </dependencies>  

依赖版本统一维护和管理

<!--  声明版本-->
  <properties> 
<!--    命名可自定义,内部制定版本-->
    <junit.version>5.9.2</junit.version>
    <maven.compiler.source>17</maven.compiler.source>  
    <maven.compiler.target>17</maven.compiler.target>  
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  </properties>
    <dependency> 
      <groupId>org.junit.jupiter</groupId>  
      <artifactId>junit-jupiter-api</artifactId>  
<!--      引入properties声明版本-->
      <version>${junit.version}</version>
      <scope>test</scope> 
    </dependency>  

依赖范围

通过设置坐标的依赖范围(scope),可以设置对应jar包的作用范围:编译环境、测试环境、运行环境

依赖范围描述
compile编译依赖范围,scope元素的缺省值。使用此依赖范围的Maven依赖,对于三种classpath均有效,即该Maven依赖在上述三种classpath均会被引入。例如log4j在编译、测试、运行过程中都是必须的。
test测试依赖范围。使用此依赖范围的Maven依赖,只对测试classpath有效。例如,Junit依赖只有在测试阶段才需要。
provide已提供依赖范围。使用此依赖对于编译、测试阶段而言是需要的,例如:servlet-api依赖用于编译、测试阶段而言是需要的,但是运行阶段,由于外部容器已经提供,故不需要Maven重复引入该依赖。
runtime运行时依赖范围。使用此依赖范围的Maven依赖,只对测试classpath、运行classpath有效。例如,JDBC驱动实现依赖,其在编译时只需要JDK提供的JDBC接口即可,只有测试、运行阶段才需要实现JDBC接口的驱动
system系统依赖范围,其效果与provided的依赖范围一致。其用于添加非Maven仓库的本地依赖,通过依赖元素dependency中systemPath元素指定本地依赖的路径。鉴于使用其会导致项目的可移植型
import导入依赖范围,该依赖范围只能与dependcyManagement元素配合使用,其功能是将目标pom.xml文件中dependencyManagement元素配合使用,其功能是将目标pom.xml文件中dependencyManagement的配置导入合并到当前pom.xml的dependencyManagement中。

Maven工程依赖下载失败错误解决

在使用Maven构建项目时,可能会发生依赖项下载错误的情况,主要原因有以下几种:

  1. 下载依赖时出现网络故障或者仓库服务器宕机等原因,导致无法连接至Maven仓库,从而无法下载依赖。
  2. 依赖项的版本号或者配置文件中的版本号错误,或者依赖项没有正确定义,导致Maven下载的依赖项与实际需要的不一致,从而引发错误。
  3. 本地Maven仓库或缓存被污染或损坏,导致Maven无法正确地使用现有的依赖项。

解决方案:

  1. 检查网络连接和Maven仓库服务器状态。
  2. 确保依赖项的版本号与项目对应的版本号匹配,并检查POM文件中的依赖项是否正确。
  3. 清除本地Maven仓库缓存(lastUpdated文件),因为只要存在lastupdated缓存文件,刷新也不会车型下载。本地仓库中,根据依赖的gav属性依次向下查找文件夹,最终删除内部的文件,属性重新下载即可
    在这里插入图片描述
    发现内部包含的.astupdated结尾的文件,删除即可
  4. 或者可以将清除lastUpdated文件的操作写在一个脚本文件中,手动创建文件clearLastUpdated.bat,名称任意,但是后缀必须是bat,将以下内容复制到文件中。
cls 
@ECHO OFF 
SET CLEAR_PATH=D: 
SET CLEAR_DIR=D:\tool\maven\repository
color 0a 
TITLE ClearLastUpdated For Windows 
GOTO MENU 
:MENU 
CLS
ECHO. 
ECHO. * * * *  ClearLastUpdated For Windows  * * * * 
ECHO. * * 
ECHO. * 1 清理*.lastUpdated * 
ECHO. * * 
ECHO. * 2 查看*.lastUpdated * 
ECHO. * * 
ECHO. * 3 退 出 * 
ECHO. * * 
ECHO. * * * * * * * * * * * * * * * * * * * * * * * * 
ECHO. 
ECHO.请输入选择项目的序号: 
set /p ID= 
IF "%id%"=="1" GOTO cmd1 
IF "%id%"=="2" GOTO cmd2 
IF "%id%"=="3" EXIT 
PAUSE 
:cmd1 
ECHO. 开始清理
%CLEAR_PATH%
cd %CLEAR_DIR%
for /r %%i in (*.lastUpdated) do del %%i
ECHO.OK 
PAUSE 
GOTO MENU 
:cmd2 
ECHO. 查看*.lastUpdated文件
%CLEAR_PATH%
cd %CLEAR_DIR%
for /r %%i in (*.lastUpdated) do echo %%i
ECHO.OK 
PAUSE 
GOTO MENU

若打开中文乱码,请修改字符编码

Maven工程Build构建配置

项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源码、链接依赖库、打包和部署等多个步骤。
默认情况下,构建不需要额外的配置,都有对应的缺省配置。当然了,我们也可以在pom.xml定制一些配置,来修改默认构建行为和产物。

例如:

  1. 指定构建打包文件的名称,非默认名称
  2. 指定构建打包时,指定包含文件格式和排除文件
  3. 插件版本过低,配置更高版本插件

构建配置是在pom.xml -> build 标签中指定

 <build>
<!--      自定义打包名称-->
      <finalName>m1_webapp-1.0.1.jar</finalName>
    <plugins> 
      <plugin> 
        <groupId>org.apache.maven.plugins</groupId>  
        <artifactId>maven-war-plugin</artifactId>  
        <version>3.2.2</version> 
      </plugin> 
    </plugins> 
  </build> 

在这里插入图片描述
指定打包文件
如果在java文件夹中添加java类,会自动打包编译到classes文件夹下
但是在java文件夹中添加xml文件,默认不会被打包
默认情况下,安装Maven工程结构放置的文件会默认被编译和打包
除此之外,我们可以使用resources标签,指定要打包资源的文件夹要把哪些静态资源打包到classes根目录下
应用场景:mybatis中有时会将用于编写SQL语句的映射文件和mapper接口都写在src/main/java下的某个包中,此时映射文件就不会被打包
在这里插入图片描述
打包后的文件中没有user.xml

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

在这里插入图片描述
配置依赖插件
dependencies标签下引入开发需要的jar包,我们可以在build/plugins/plugin标签引入插件
常用的插件:修改JDK版本、tomcat插件、mybatis分页插件、mybatis逆向工程插件等等。

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.2</version>
            </plugin>
<!--            java编译插件-->
<!--            <plugin>-->
<!--                <groupId>org.apache.maven.plugins</groupId>-->
<!--                <artifactId>maven-compiler-plugin</artifactId>-->
<!--                <configuration>-->
<!--                    <source>1.8</source>-->
<!--                    <target>1.8</target>-->
<!--                    <encoding>UTF-8</encoding>-->
<!--                </configuration>-->
<!--            </plugin>-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8090</port>
                    <path>/</path>
                    <uriEncoding>UTF-8</uriEncoding>
                    <server>tomcat7</server>
                </configuration>
            </plugin>
        </plugins>
    </build>

在这里插入图片描述

Maven依赖传递和依赖冲突

Maven依赖传递特性

概念
假如有Maven项目A ,项目B依赖A,项目C依赖项目B。那么我们可以说C依赖A。他们的依赖关系:C -> B -> A,那么我们执行项目C时,会自动把B、A都下载导入到C项目的jar包文件夹中,这就是依赖的传递性。
作用

  • 简化依赖导入过程
  • 确保依赖版本正确

传递原则
在这里插入图片描述
在这里插入图片描述
在C依赖B,B依赖A的前提下,A能否传递到C,取决于B依赖A时使用的依赖范围以及配置。

  • B依赖A时使用compile范围:可以传递
  • B依赖A时使用test或provided范围:不能传递,所以需要这样的jar包时,就必须在需要的地方明确配置依赖才可以。
  • B依赖A时,若配置了true标签则不能传递
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
            <optional>true</optional>
        </dependency>

在这里插入图片描述
依赖传递终止

  • 非compile范围进行依赖传递
  • 使用optional配置终止依赖传递
  • 依赖冲突(传递依赖已存在)

Maven依赖冲突特性

当直接引用或者间接引用出现了相同的jar包,这时,一个项目就会出现相同的重复jar包,这就算是冲突,依赖冲突避免出现重复依赖,并且终止传递依赖。
在这里插入图片描述
Maven自动解决依赖冲突问题能力,会按照自己的原则,进行重复依赖选择。同时也提供了手动解决的冲突方式,但不推荐使用
相同版本jar包
在这里插入图片描述
这种情况下,m_B会使用直接pom中的jar包
解决依赖冲突(如何选择重复依赖)方式

  1. 自动选择原则
    • 短路有限原则(第一原则)
      A -> B -> C -> D -> E -> X(version 0.0.01)
      A -> F -> X(version 0.0.2)
      那么A依赖于X(version 0.0.2)
    • 依赖路径长度相同情况下,这先声明优先(第二原则)
      A -> E -> X(version 0.0.1)
      A -> F -> X(version 0.0.2)
      那么 安装标签< depencies >书写顺序``,先声明的,路径相同,会优先选择
  2. 手动排除
        <dependency>
            <groupId>com.alive.pro</groupId>
            <artifactId>m_A</artifactId>
            <version>1.0</version>
            <exclusions>
                <exclusion>
                    <groupId>com.alibaba</groupId>
                    <artifactId>druid</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

Maven工程继承和聚合关系

Maven工程继承关系

  1. 继承概念
    Maven继承是指在Maven项目中,让一个项目从另外一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作。
  2. 继承作用
    在父工程中统一管理项目中的依赖信息。
  • 背景
    • 对一个比较大型的项目进行了模块拆分。
    • 对一个project下面,创建了很多个module
    • 每一个module都需要配置自己的依赖信息。
  • 需求
    • 在每个module中各自维护各自的依赖信息很容易发生出入,不易于统一管理。
    • 使用同一个框架内的不同jar包,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一。
    • 使用框架时所需要的jar包组合(依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的jar包;又能够将以往的经验沉淀下来,节约时间和精力。
  1. 继承语法
    • 父工程
      在这里插入图片描述

m_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.alive.pro</groupId>
    <artifactId>m_parent</artifactId>
    <version>1.0</version>
    <!--父工程打包方式
    由于父工程部参与打包,因此打包方式为pom
    -->
    <packaging>pom</packaging>
    <modules>
        <module>m_1</module>
        <module>m_2</module>
    </modules>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.2.8</version>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-api</artifactId>
                <!--      引入properties声明版本-->
                <version>5.9.2</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

m_1

<?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>
    <parent>
        <groupId>com.alive.pro</groupId>
        <artifactId>m_parent</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>m_1</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
    </dependencies>
</project>

m_2

<?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>
    <parent>
        <groupId>com.alive.pro</groupId>
        <artifactId>m_parent</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>m_2</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
        </dependency>
    </dependencies>
</project>

Maven工程聚合关系

  1. 聚合概念
    Maven聚合是指将多个项目组织到一个父级项目中,以便一起构建和管理的机制。聚合可以帮助我们更好的管理一组相关的子项目,同时简化它们的构建和部署过程。
  2. 聚合作用
    1. 管理多个子项目:通过聚合,可以将多个子项目组织在一起,方便管理和维护。
    2. 构建和发布一组相关的项目:通过聚合,可以在一个命令中构建和发布多个相关的项目,简化了部署和维护工作。
    3. 优化构建顺序:通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况。
    4. 统一管理依赖项:通过聚合,可以在父项目中管理公共依赖项和插件,避免重复定义。
  3. 聚合语法
    父项目中包含的子项目列表
    <modules>
        <module>m_1</module>
        <module>m_2</module>
    </modules>

Maven私服

Maven私服简介

① 私服简介

Maven私服是一种特殊的Maven远程仓库,他是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库,其他远程公共仓库)。
建立了Maven私服后,当局域网内的用户需要某个构件时,会按照如下顺序进行请求和下载。
请求本地仓库,若本地仓库不存在所需构件,则跳转到第2步;
请求Maven私服,将所需构件下载到本地仓库,若私服中不存在所需构件,则跳转至第3步;
请求外部的远程仓库,将所需构件下载并缓存到Maven私服,若外部远程仓库不存在所需构建,则Maven直接报错。
此外,一些无法从外部仓库下载到的构建,也能从本地上传到私服供其他人使用。
在这里插入图片描述
② Maven私服的优势

  1. 节省带宽,清楚对外部远程仓库的大量重复请求,降低外网带宽压力。
  2. 下载速度更快,Maven私服位于局域网内,从私服下载构建更快更稳定。
  3. 便于部署第三方构件,有些构件无法从任何一个远程仓库中获取,(如:公司或组织内部的私有构件、Oracle的JDBC驱动等),建立私服之后,就可以将这些构件部署到私服中,供内部Maven项目使用。
  4. 提高项目的稳定性,增强对项目的控制,如果不建立私服,那么Maven项目的构件就高度依赖于外部的远程仓库,若外部网络不稳定,则项目的构建过程也变得不稳定。建立私服后,即使外部网络状况不佳甚至中断,只要私服中已经缓存了所需的构件,Maven也能够正常运行。私服软件(如:Nexus)提供了很多控制功能(如:权限管理、RELEASE/SNAPSHOT版本控制等),可以对仓库进行一些更加高级的控制。
  5. 降低中央库的负荷压力,由于私服会缓存中央库的构件,避免了很多对中央仓库的重复下载,降低了中央仓库的负荷。

③ 常见的Maven私服产品

  1. Apache - Archiva
  2. JFrog - Artifactory
  3. Sonatype - Nexus

安装不再说明,百度linux 安装 Nexus

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值