Maven
Maven基础
Apache https://www.apache.org/index.html#projects-list
Maven是一个项目管理工具,用于管理和构建java项目,将项目开发和管理过程抽象成一个项目对象模型POM
基于项目对象模型(POM)project object model的概念,通过一小段描述信息来管理项目的构建。
作用
依赖管理:方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题
统一项目结构:提供标准、统一的项目结构:不同开发环境如eclipse,MyEclipse和idea结构不一样
- maven
- src
- main
- java
- java源代码目录
- resources配置文件目录
- test测试项目资源(java,resources)
- pom.xml
- src
项目构建:标准跨平台 (Linux、Windows、Macos) 的自动化项目构建方式:清理编译测试打包发布
pom.xml---->pom《===构建生命周期===》依赖管理--------->仓库
依赖插件【各种jar包,源代码,帮助文档,war包,xml包】构建生命周期
仓库
用于存储资源,管理各种jar包。
本地仓库: 自己计算机上的一个目录。
远程仓库(私服):一般由公司团队搭建的私有仓库。从中央仓库获取资源,可以保护具有版权的资源,包含购买或自主研发的jar,一定范围内共享资源,不对外开放。中央仓库中的jar都是开源的,不能存储具有版权的资源
远程仓库(中央仓库): 由Maven团队维护的全球唯一的。仓库地址: https://repo1.maven.org/maven2
坐标
Maven 中的坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置;使用坐标来定义项目或引入项目中需要的依赖
groupld: 定义当前Maven项目隶属组织名称(通常是域名反写,例如: com.itheima)
artifactld: 定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service
version:定义当前项目版本号
packaging:定义该项目的打包方式
<dependency>
<groupld>com.itheima</groupld>
<artifactld>maven-project01</artifactld>
<version>1.0-SNAPSHOT</version>
</dependency>
安装
1、解压
bin:可执行文件,可运行指令
boot:启动
conf:配置文件
lib:Maven依赖的jar包资源
2、配置本地仓库:修改 conf/settings.xml 中的<localRepository> 为一个指定目录。
<localRepository>E: developlapache-maven-3.6.mvn repo</localRepository>
远程仓库配置:maven默认
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2<url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
3、配置阿里云私服:修改 conf/settings.xml中的
<mirro>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
4、配置环境变量MAVEN_HOME为maven的解压目录,并将其bin目录加入PATH环境变量
5、测试
cmd: mvn -v //maven3.6.1,jdk17_0_4
- IDEA集成Maven-配置Maven环境
配置Maven环境(当前工程)
选择IDEA中 File --> Settings --> Build,Execution,Deployment --> Build Tools --> Maven设置IDEA使用本地安装的 Maven,并修改配置文件及本地仓库路径
Runner:jdk11
java Compiler:Project bytecode version:11
全局配置
file -closeproject--All setting
- IDEA集成Maven-创建Maven项目
创建Maven模块,点击next,填写名称,坐标信息等,完成创建,编写helloworld
Name:模块名称
Location:模块存放路径
Groupld:组织名
Artifactld:模块名
Version:版本号
test没有resources:
test-new-directory:选择resources
运行代码后出现target文件夹,里面有字节码文件等
- IDEA集成Maven-导入Maven项目
1、右侧maven点击+,选中对应pom.xml文件
2、file--project Structure-modules--+--import modules
没有右侧maven:view--appearance-tool window bars
remove删除
依赖管理
依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖。
- 依赖配置
在pom.xml中依赖配置 <dependency>
如果引入的依赖,在本地仓库不存在,将会连接远程仓库/中央仓库,然后下载依赖。(这个过程会比较耗时,耐心等待)
如果不知道依赖的坐标信息,可以到https://mvnrepository.com/中搜索。
- 依赖传递
把项目一的坐标复制到项目二的dependency里
直接依赖:在当前项目中通过依赖配置建立的依赖关系
间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
可视化:右键Diagrams
依赖传递冲突问题:
路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
特殊优先:当同级配置了相同资源的不同版,后配置的覆美先配置的
可选依赖
可选依赖指对外隐藏当前所依赖的资源一不透明
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!--可选依赖是隐藏当前工程所依赖的资源,隐藏后对应资源将不具有依赖传递-->
<optiona1>true</optional>
</dependency>
排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本一一不需要
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId
</exclusion>
</exclusions>
</dependency>
- 依赖范围
依赖的jar包,默认情况下,可以在任何地方使用。可以通过 <scope>设置其作用范围
主程序范围有效。 (main文件夹范围内)
测试程序范围有效。(test文件夹范围内)
是否参与打包运行。(package指令范围内)
<dependency>
<groupld>junit</groupld>
<artifactld>junit</artifactld>
<version>4.10</version>
<scope>test</scope>
</dependency>
| scope值 | 主程序 | 测试程序 | 打包(运行) | 范例 |
|---|---|---|---|---|
| compile(默认) | 1 | 1 | 1 | log4j |
| test | 1 | junit | ||
| provided | 1 | 1 | servlet-api | |
| runtime | 1 | 1 | jdbc驱动 |
打包方式
jar:普通模块打包,springboot项目基本都是jar包(内嵌tomcat运行)
war:普通web程序打包,需要部署在外部的tomcat服务器中运行
pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理
生命周期
Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一
Maven中有3套相互独立的生命周期
-
clean:清理工作
-
default: 核心工作,如: 编译、测试、打包、安装、部署等。
-
site:生成报告、发布站点等
每套生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段
在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行。【运行编译,clean不会运行】
clean生命周期
pre-clean 执行一些需要在clean之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在clean之后立刻完成的工作
default构建生命周期
validate(校验) 校验项目是否正确并且所有必要的信息可以完成项目的构建过程
initialize(初始化) 初始化构建状态,比如设置属性值。
generate-sources (生成源代码) 生成包含在编译阶段中的任何源代码
process-sources(处理源代码) 处理源代码,比如说,过滤任意值
generate-resources (生成资源文件) 生成将会包含在项目包中的资源文件。
process-resources (处理资源文件) 复制和处理资源到目标目录,为打包阶段最好准备
compile (编译) 编译项目的源代码
process-classes(处理类文件) 处理编译生成的文件,比如说对Java class文件做字节码改善优化
generate-test-sources (生成测试源代码) 生成包含在编译阶段中的任何测试源代码
process-test-sources (处理测试源代码) 处理测试源代码,比如说,过演任意值。
generate-test-resources(生成测试资源文件) 为测试创建资源文件
process-test-resources (处理测试资源文件) 复制和处理测试资源到目标目录
test-compile (编译测试源码) 编译测试源代码到测试目标目录
process-test-classes (处理测试类文件) 处理测试源码编译生成的文件。
test (测试) 使用合适的单元测试框架运行测试(Juint是其中之一)
prepare-package(准备打包) 在实际打包之前,执行任何的必要的操作为打包做准备。
package(打包) 将编译后的代码打包成可分发格式的文件,比如JARWAR或者EAR
pre-integration-test (集成测试前) 在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
integration-test (集成测试) 处理和部署项目到可以运行集成测试环境中。
post-integration-test (集成测试后) 在执行集成测试完成后进行必要的动作,比如说,清理集成测试环境
verify(验证) 运行任意的检查来验证项目包有效目达到质量标准
install(安装) 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖
deploy(部署) 将最终的项目包复制到远程仓库中与其他开发者和项目共享。
site构建声明周期
pre-site 执行一些需要在生成站点文档之前完成的工作
site 生成项目的站点文档
post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy 将生成的站点文档部署到特定的服务器上
插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
默认maven在各个生命周期上绑定有预设的功能
通过插件可以自定义其他功能:maven.apache.org/plugins/index.html
clean: 移除上一次构建生成的文件
compile: 编译项目源代码
test: 使用合适的单元测试框架运行测试(junit)
package: 将编译后的文件打包,如: jar、war等
install: 安装项目到本地仓库
执行指定生命周期的两种方式:
-
在idea中,右侧的maven工具栏,选中对应的生命周期,双击执行
-
命令行:
mvn clean...
生命周期由插件完成对应工作
分模块开发与设计
- 将项目按照功能拆分成若干个子模块
- 方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享
将controller,mapper等拆成一个个对立的模块
-
创建新模块
-
项目中创建包并将类拷贝到该包中
-
删除原项目中的包
-
建立依赖关系
-
在项目的pom.xml添加新模块的依赖;因为添加了依赖,所以在原项目就能找到
<dependency> <groupId>com.itheima</groupId> <artifactId>maven_03_pojo</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
-
-
将项目安装
install本地仓库
聚合&继承
聚合
将多个模块组织成一个整体,同时进行项目构建的过程称为聚合
聚合工程通常是一个不具有业务功能的空工程,有且仅有一个pom文件【一个parent模块】;主要是用来快速构建项目,管理项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可);使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建
当工程中某个模块发生变更)时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题
使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建
- 创建一个空的maven项目;将项目的打包方式改为pom;pom.xml添加所要管理的项目
- 使用聚合统一管理项目:聚合工程管理的项目在进行运行的时候,会按照项目与项目之间的依赖关系来自动决定执行的顺序和配置的顺序无关。
<packaging>pom</packaging>
<!--管理的工程列表-->
<!--聚合其他模块-->
</project>
<modules>
<module>../pojo</module>
<module>../dao</module>
<module>...</module>
</modules>
</project>
继承
继承描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承。
父工程主要是用来快速配置依赖jar包和管理项目中所使用的资源
作用:简化配置,减少版本冲突
Maven的版本锁定功能来统一管理各个依赖的版本,实现版本管理
- 在父工程中所配置的
<dependencyManagement>只能统一管理依赖版本,并不会将这个依赖直接引入进来。 这点和<dependencies>是不同的。 - 子工程要使用这个依赖,还是需要引入的,只是此时就无需指定
<version>版本号了,父工程统一管理。变更依赖版本,只需在父工程中统一变更。
在父工程声明依赖管理:
<!--统一管理依赖版本-->
<dependencymanagement>
<dependencies>
<!--具体的依赖-->
</dependencies>
</dependencymanagement>
<build>
<pluginsManagement>
<plugins>
<!--具体的插件-->
</plugins>
</pluginsManagement>
</build>
子模块
- relativePath指定父工程的pom文件的相对位置(如果不指定,将从本地仓库/远程仓库查找该工程)。
<!--定义该工程的父工程-->
<!--配置当前工程继承自parent工程-->
<parent>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<relativePath></relativePath> <!--父工程的pom文件-->
</parent>
<moduleVersion></moduleVersion>
<artifactId></artifactId>
<packaging></packaging>
<dependencies>
<!--具体的依赖,不用指定版本号-->
</dependencies>
区别
-
两种之间的作用
-
聚合用于快速构建项目,对项目进行管理
-
继承用于简化配置和管理子项目中所使用jar包的版本,统一管理依赖
-
-
聚合和继承的相同点
-
聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
-
聚合与继承均属于设计型模块,并无实际的模块内容
-
-
聚合和继承的不同点
- 聚合是在当前模块中配置关系
- 继承是在子模块中配置关系
-
IDEA构建聚合与继承工程
- 步骤1:创建一个Maven项目
- 可以将项目中的
src目录删除掉,这个项目作为聚合工程和父工程。
- 可以将项目中的
- 步骤2:创建子项目
- 该项目可以被聚合工程管理,同时会继承父工程。
- 添加module到parent工程中,即聚合
- 设置父项目为parent,即继承
- 步骤1:创建一个Maven项目
属性
属性(统一管理版本)
自定义属性
<properties>
<a.version</a.version>
</properties>
<version>${a.version}</version>
内置属性
${basedir}
${version}
Setting属性
使用Maven配置setting.xml中的标签属性,用于动态配置
${settings.localRepository}
java系统属性mvn help:system,system.getproperties
${user.home}
环境变量属性
${env.JAVA_HOME}
资源文件引用属性【引用其他文件中的配置】
<build>
<resources>
<!--设置资源目录,并设置能够解析${}-->
<resource>
<directory>../maven_02_ssm/src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>../maven_03_pojo/src/main/resources</directory>
<filtering>true</filtering>
</resource>
...
</resources>
</build>
配置所有的recoures
${project.basedir}: 当前项目所在目录,子项目继承了父项目,相当于所有的子项目都添加了资源目录的过滤
<build>
<resources>
<resource>
<!--代表当前项目所在的目录-->
<directory>${project.basedir}/src/main/resources</directory>
<!--开启资源文件目录加载属性的过滤器-->
<filtering>true</filtering>
</resource>
</resources>
</build>
Maven发现你的项目为web项目,就会去找web项目的入口web.xml[配置文件配置的方式,发现没有找到,就会报错。
- 在项目的
src\main\webapp\WEB-INF\添加一个web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
</web-app>
- 配置maven打war包时,忽略web.xml检查
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<failOnMissingwebXml>false</failOnMissingwebXm1>
</configuration>
</plugin>
资源配置(配置文件加载属性)
<properties>
<jdbc.url>...</jdbc.url>
</properties>
<build>
<!--配置资源文件对应的信息-->
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering><!--开启对配置文件的资源加载过滤-->
</resource>
</resources>
<!--配置测试文件对应的信息-->
<testresources>
<testresource>
<directory>${project.basedir}/src/test/resources</directory>
<filtering>true</filtering>
</testresource>
</testresources>
</build>
jdbc.url: ${jdbc.url}
版本管理
在我们jar包的版本定义中,有两个工程版本用的比较多:
- SNAPSHOT(快照版本)
- 项目开发过程中临时输出的版本,称为快照版本
- 快照版本会随着开发的进展不断更新
- RELEASE(发布版本)
- 项目开发到一定阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的
- 即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本
除了上面的工程版本,我们还经常能看到一些发布版本:
- alpha版:内测版,bug多不稳定内部版本不断添加新功能
- beta版:公测版,不稳定(比alpha稳定些),bug相对较多不断添加新功能
- 纯数字版
多环境开发配置
-
父工程中定义多环境;并指定默认激活环境
<profiles> <!--例子--> <profile> <id>环境名称</id> <properties> <key>value</key> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <!--开发环境--> <profile> <id>env_dep</id> <properties> <jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url> </properties> <!--设定是否为默认启动环境--> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <!--生产环境--> <profile> <id>env_pro</id> <properties> <jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_db</jdbc.url> </properties> </profile> <!--测试环境--> <profile> <id>env_test</id> <properties> <jdbc.url>jdbc:mysql://127.3.3.3:3306/ssm_db</jdbc.url> </properties> </profile> </profiles> -
使用多环境(构建过程)
mvn 指令 -P 环境定义ID[环境定义中获取]
跳过测试
- 点击图标跳过所有测试
- 使用Maven的命令行
mvn 指令 -D skipTests- 执行的项目构建指令必须包含测试生命周期,否则无效果。例如执行compile生命周期,不经过test生命周期。
- 该命令可以不借助IDEA,直接使用cmd命令行进行跳过测试,需要注意的是cmd要在pom.xml所在目录下进行执行。
- 测试是一个插件,配置插件实现跳过测试
- skipTests:如果为true,则跳过所有测试,如果为false,则不跳过测试
- excludes:哪些测试类不参与测试,即排除,针对skipTests为false来设置的
- includes: 哪些测试类要参与测试,即包含,针对skipTests为true来设置的
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
<plugin>
<artifactId>maven-surefire-plugin</artifactId<version>2.12.4</version>
<configuration>
<skipTests>false</skipTests>
<!--排除不参与测试的内容-->
<excludes>
<exclude>**/BookServiceTest.java</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<skipTests>true</skipTests><!-- 设置跳过测试-->
<includes><!-- 包含指定的测试用例-->
<include>**/User*Test.java</include>
</includes>
<excludes><!-- 排除指定的测试用例-->
<exclude>**/User*TestCase.java</exclude>
</excludes>
</configuration>
</plugin>
私服
- 私服:公司内部搭建的用于存储Maven资源的服务器
- 远程仓库:Maven开发团队维护的用于存储Maven资源的服务器
- Nexus
- Sonatype公司的一款maven私服产品
- 下载地址:https://help.sonatype.com/repomanager3/download
私服是架设在公司局域网内部的一台服务器,是一种特殊的远程仓库。它是架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题。
有了私服之后,各个团队就可以直接连接私服。 A 连接上私服之后,他就可以把jar包直接上传到私服当中。让 B 团队的所有开发人员也连接同一台私服。连接上这一台私服之后,他就会根据坐标的信息,直接从私服当中将对应的jar包下载到自己的本地仓库,这样就可以使用到依赖当中所提供的一些工具类了。这样我们就可以通过私服来完成资源的共享。
而如果我们在项目中需要使用其他第三方提供的依赖,如果本地仓库没有,也会自动连接私服下载,如果私服没有,私服此时会自动连接中央仓库,去中央仓库中下载依赖,然后将下载的依赖存储在私服仓库及本地仓库中。
依赖查找顺序:本地仓库------>私服仓库------>中央仓库
- 资源上传与下载
配置:
在maven的配置文件中配置访问私服的用户名、密码。
在maven的配置文件中配置连接私服的地址(url地址)。
在项目的pom.xml文件中配置上传资源的位置(url地址)。
配置好了上述三步之后,要上传资源到私服仓库,就执行执行maven生命周期:deploy。
上传资源的位置url---install----->本地仓库(访问私服的用户名、密码;连接私服的地址)---deploy--->私服仓库
项目版本说明
- RELEASE:存储自己开发的RELEASE发布版本的资源。
- RELEASE(发布版本):功能趋于稳定、当前更新停止,可以用于发行的版本,存储在私服中的RELEASE仓库中。
- SNAPSHOT:存储自己开发的SNAPSHOT发布版本的资源。
- SNAPSHOT(快照版本):功能不稳定、尚处于开发中的版本,即快照版本,存储在私服的SNAPSHOT仓库中。
- Central:存储的是从中央仓库下载下来的依赖。
- 当我们要使用的资源是远程中央仓库有的第三方jar包,这个时候就需要从远程中央仓库下载,每个开发者都去远程中央仓库下速度比较慢(中央仓库服务器在国外);私服就再准备一个仓库,用来专门存储从远程中央仓库下载的第三方jar包,第一次访问没有就会去远程中央仓库下载,下次再访问就直接走私服下载
私服仓库分类
- 宿主仓库hosted
- 保存无法从中央仓库获取的资源
- 自主研发
- 第三方非开源项目,比如Oracle,因为是付费产品,所以中央仓库没有
- 保存无法从中央仓库获取的资源
- 代理仓库proxy
- 代理远程仓库,通过nexus访问其他公共仓库,例如中央仓库
- 仓库组group
- 将若干个仓库组成一个群组,简化配置
- 仓库组不能保存资源,属于设计型仓库
私服配置
1.设置私服的访问用户名/密码(在自己maven安装目录下的conf/settings.xml中的servers中配置)
<server>
<id>maven-releases</id>
<username>admin</username>
<password>admin</password>
</server>
<server>
<id>maven-snapshots</id>
<username>admin</username>
<password>admin</password>
</server>
2.设置私服依赖下载的仓库组地址(在自己maven安装目录下的conf/settings.xml中的mirrors、profiles中配置)
<mirror>
<id>maven-public</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.150.101:8081/repository/maven-public/</url>
</mirror>
<profile>
<id>allow-snapshots</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>maven-public</id>
<url>http://192.168.150.101:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
3.IDEA的maven工程的pom文件中配置上传(发布)地址(直接在tlias-parent中配置发布地址)
<distributionManagement>
<!-- release版本的发布地址 -->
<repository>
<id>maven-releases</id>
<url>http://192.168.150.101:8081/repository/maven-releases/</url>
</repository>
<!-- snapshot版本的发布地址 -->
<snapshotRepository>
<id>maven-snapshots</id>
<url>http://192.168.150.101:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
配置完成之后,我们就可以在tlias-parent中执行deploy生命周期,将项目发布到私服仓库中。
通过日志,我们可以看到,这几个模块打的jar包确实已经上传到了私服仓库中(由于当前我们的项目是SNAPSHOT版本,所以jar包是上传到了snapshot仓库中)。
那接下来,我们再来打开私服来看一下:
我们看到,我们项目中的这几个模块,在私服中都有了。 那接下来,当其他项目组的开发人员在项目中,就可以直接通过依赖的坐标,就可以完成引入对应的依赖,此时本地仓库没有,就会自动从私服仓库中下载。

浙公网安备 33010602011771号