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构建项目时,可能会发生依赖项下载错误的情况,主要原因有以下几种:
- 下载依赖时出现网络故障或者仓库服务器宕机等原因,导致无法连接至Maven仓库,从而无法下载依赖。
- 依赖项的版本号或者配置文件中的版本号错误,或者依赖项没有正确定义,导致Maven下载的依赖项与实际需要的不一致,从而引发错误。
- 本地Maven仓库或缓存被污染或损坏,导致Maven无法正确地使用现有的依赖项。
解决方案:
- 检查网络连接和Maven仓库服务器状态。
- 确保依赖项的版本号与项目对应的版本号匹配,并检查POM文件中的依赖项是否正确。
- 清除本地Maven仓库缓存(
lastUpdated
文件),因为只要存在lastupdated缓存文件,刷新也不会车型下载。本地仓库中,根据依赖的gav属性依次向下查找文件夹,最终删除内部的文件,属性重新下载即可
发现内部包含的.astupdated
结尾的文件,删除即可- 或者可以将清除
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定制一些配置,来修改默认构建行为和产物。
例如:
- 指定构建打包文件的名称,非默认名称
- 指定构建打包时,指定包含文件格式和排除文件
- 插件版本过低,配置更高版本插件
构建配置是在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包
解决依赖冲突(如何选择重复依赖)方式
- 自动选择原则
- 短路有限原则(第一原则)
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 >中
书写顺序``,先声明的,路径相同,会优先选择
- 短路有限原则(第一原则)
- 手动排除
<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工程继承关系
- 继承概念
Maven继承是指在Maven项目中,让一个项目从另外一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作。 - 继承作用
在父工程中统一管理项目中的依赖信息。
- 背景
- 对一个比较大型的项目进行了模块拆分。
- 对一个project下面,创建了很多个module
- 每一个module都需要配置自己的依赖信息。
- 需求
- 在每个module中各自维护各自的依赖信息很容易发生出入,不易于统一管理。
- 使用同一个框架内的不同jar包,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一。
- 使用框架时所需要的jar包组合(依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的jar包;又能够将以往的经验沉淀下来,节约时间和精力。
- 继承语法
- 父工程
- 父工程
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工程聚合关系
- 聚合概念
Maven聚合是指将多个项目组织到一个父级项目中,以便一起构建和管理的机制。聚合可以帮助我们更好的管理一组相关的子项目,同时简化它们的构建和部署过程。 - 聚合作用
- 管理多个子项目:通过聚合,可以将多个子项目组织在一起,方便管理和维护。
- 构建和发布一组相关的项目:通过聚合,可以在一个命令中构建和发布多个相关的项目,简化了部署和维护工作。
- 优化构建顺序:通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况。
- 统一管理依赖项:通过聚合,可以在父项目中管理公共依赖项和插件,避免重复定义。
- 聚合语法
父项目中包含的子项目列表
<modules>
<module>m_1</module>
<module>m_2</module>
</modules>
Maven私服
Maven私服简介
① 私服简介
Maven私服是一种特殊的Maven远程仓库,他是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库,其他远程公共仓库)。
建立了Maven私服后,当局域网内的用户需要某个构件时,会按照如下顺序进行请求和下载。
请求本地仓库,若本地仓库不存在所需构件,则跳转到第2步;
请求Maven私服,将所需构件下载到本地仓库,若私服中不存在所需构件,则跳转至第3步;
请求外部的远程仓库,将所需构件下载并缓存到Maven私服,若外部远程仓库不存在所需构建,则Maven直接报错。
此外,一些无法从外部仓库下载到的构建,也能从本地上传到私服供其他人使用。
② Maven私服的优势
- 节省带宽,清楚对外部远程仓库的大量重复请求,降低外网带宽压力。
- 下载速度更快,Maven私服位于局域网内,从私服下载构建更快更稳定。
- 便于部署第三方构件,有些构件无法从任何一个远程仓库中获取,(如:公司或组织内部的私有构件、Oracle的JDBC驱动等),建立私服之后,就可以将这些构件部署到私服中,供内部Maven项目使用。
- 提高项目的稳定性,增强对项目的控制,如果不建立私服,那么Maven项目的构件就高度依赖于外部的远程仓库,若外部网络不稳定,则项目的构建过程也变得不稳定。建立私服后,即使外部网络状况不佳甚至中断,只要私服中已经缓存了所需的构件,Maven也能够正常运行。私服软件(如:Nexus)提供了很多控制功能(如:权限管理、RELEASE/SNAPSHOT版本控制等),可以对仓库进行一些更加高级的控制。
- 降低中央库的负荷压力,由于私服会缓存中央库的构件,避免了很多对中央仓库的重复下载,降低了中央仓库的负荷。
③ 常见的Maven私服产品
- Apache - Archiva
- JFrog - Artifactory
- Sonatype - Nexus
安装不再说明,百度linux 安装 Nexus