1. 概述
1.1. 项目集成jar的问题
项目中jar包资源越来越多,jar包的管理越来越沉重。常规的jar包管理主要存在以下的问题:
- 繁琐:要为每个项目手动导入所需的jar,需要搜集全部jar
- 复杂:项目中的jar如果需要版本升级,就需要再重新搜集jar
-
1.2. 常用构建工具
目前开发中常用的项目管理工具主要就是:Maven和Gradle。
Maven(/ˈmeɪvn/):Maven这个单词来自于意第绪语(犹太语),意为知识的积累。Maven是一个基于项目对象模型(POM)的概念的纯java开发的开源的项目管理工具。主要用来管理java项目,进行依赖管理(jar包依赖管理)和项目构建(项目编译、打包、测试、部署)。此外还能分模块开发,提高开发效率。
Gradle([ɡredl]):是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。
1.3. Maven的作用
项目构建:提供标准的、跨平台的自动化项目构建方式。
- 依赖管理:方便、快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题。
-
2. 下载和安装
2.1. 下载
官网:http://maven.apache.org
下载链接:http://maven.apache.org/download.cgi2.2. 安装
2.3. 环境变量配置
依赖Java,需要配置JAVA_HOME(略)。
设置Maven自身的运行环境,需要配置MAVEN_HOME。
3. 基本概念
3.1. 仓库
仓库的作用:用于存储资源,包含各种jar包。
- 仓库的分类
- 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源。
- 远程仓库:非本机电脑上的仓库,为本地仓库提供资源。
- 中央仓库:Maven团队维护,存储所有资源的仓库。
- 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源。
私服的作用
- 保存具有版权的资源,包含购买或自主研发的jar(中央仓库中的jar都是开源的,不能存储具有版权的资源)。
- 一定范围内共享资源,仅对内部开放,不对外共享。
3.2. 坐标
3.2.1. 什么是坐标?
3.2.2. Maven坐标主要组成
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis)。
- artifactId:定义当前Maven项目名称(通常是模块名称,例如:CRM、SMS)。
- version:定义当前项目版本号。
- scope:编译范围。
- packaging:定义该项目的打包方式。
示例:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
3.2.3. Maven坐标的作用
使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别和下载工作,交由机器完成。
3.3. 仓库配置
3.3.1. 本地仓库配置
Maven启动后,会自动保存下载的资源到本地仓库。默认位置(当前目录位置为登录用户名所在目录下的.m2文件夹中)。
<localRepository>${user.home}/.m2/repository</localRepository>
自定义位置(当前目录位置为D:\dev\apache-maven-3..\repository文件夹中)。
<localRepository>D:\dev\apache-maven-3.*.*\repository</localRepository>
3.3.2. 远程仓库配置
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.3.3. 镜像仓库配置
在settings.xml文件中配置阿里云镜像仓库:
<mirrors>
<!-- 配置具体的仓库的下载镜像 -->
<mirror>
<!-- 此镜像的唯一标识符,用来区分不同的mirror元素 -->
<id>nexus-aliyun</id>
<!-- 对那种仓库进行镜像,简单说就是替代哪个仓库 -->
<mirrorOf>central</mirrorOf>
<!-- 镜像名称 -->
<name>Nexus aliyun</name>
<!-- 镜像URL -->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
3.3.4. 全局配置 VS 用户配置
- 全局配置(Global Settings):定义了当前计算机中Maven的公共配置(Maven安装目录:$M2_HOME),位于:$M2_HOME/conf/settings.xml。
用户配置(User Settings):定义了当前用户的配置,位于:~/.m2/settings.xml。
3.3.5. 配置优先级
配置优先级从高到低:
**pom.xml**
>**User Settings**
>**Global Settings**
。如果这些文件同时存在,在应用配置时,会合并它们的内容,如果有重复的配置,优先级高的配置会覆盖优先级低的。4. 相关术语
4.1. Executable Jar
Executable Jar(可执行的 jar 包),一般是指将所有依赖的jar包都放在一个Jar包内,这个Jar包包含了所有运行时需要依赖的Jar包代码,不过并没有规定这个“放”的方式,可以是将依赖的jar包直接放在入口jar包内,就像这样:
├─executable jar
│ ├─META-INF
│ │ ├─MANIFEST.MF
│ ├─com...
│ ├─lib
│ │ ├─io.netty....jar
│ │ ├─com.google....jar
│ │ ├─org.polaris....jar
│ │ ├─com.github....jar
│ │ ├─org.apache.....jar
也可以是将依赖的jar包内的文件给拷贝到入口的Jar包内,就像这样:
├─executable jar
│ ├─META-INF
│ │ ├─MANIFEST.MF
│ ├─com...
│ ├─io.netty.... classes
│ ├─com.google.. classes
│ ├─org.polaris.. classes
│ ├─com.github.. classes
│ ├─org.apache.. classes
Spring Boot算是把Executable Jar传到了千家万户,Spring Boot中提供了一个Maven插件
spring-boot-maven-plugin
,这个插件可以将所有的Maven依赖Jar包在构建时打包到一个jar文件内,并且通过Spring Boot的ClassLoader和启动类,可以加载到这些Executable Jar包中的Jar包,就是上面介绍的第1种方式:将依赖的jar包直接放在入口jar包内。4.2. uber-jar
在Maven的一些文档中我们会发现
**uber-jar**
这个术语,许多人看到后感到困惑。其实在很多编程语言中会把super叫做uber (因为uber可能是关键字), 这是上世纪80年代开始流行的,比如管”superman”叫”uberman”。所以uber-jar从字面上理解就是super-jar,这样的jar不但包含自己代码中的class ,也会包含一些第三方依赖的jar,也就是把自身的代码和其依赖的jar全打包在一个jar里面了,所以就很形象的称其为super-jar 。4.3. FatJar
在java中,通常将应用程序及其依赖jar一起打包到一个独立的jar中,就叫FatJar,它也叫uber-jar。
4.4. Shade Jar/Shadow Jar
shade机翻为阴影、遮蔽。shade jar是指将jar包及其依赖包打包到一个jar文件内,同时提供shade“遮蔽 / 重命名”某些依赖包的功能。比如一个Maven工程,依赖了很多三方包,但实际打包时你想重命名部分包,这个重命名的过程在这里可以叫shade。
Maven中的Shade插件为maven-shade-plugin
,可以将程序打包成一个独立的Jar包,包含依赖包。另一款类似的Maven插件为maven-assembly-plugin
,也可以实现同样的效果,Gradle 中也有类似的插件shadow
,功能也很强大,也支持shade功能。5. 依赖管理
5.1. 依赖配置
依赖是指当前项目运行所需要的jar包,一个项目可以设置多个依赖。
<!-- 设置当前项目所依赖的所有jar包 -->
<dependencies>
<!-- 设置具体的依赖 -->
<dependency>
<!-- 依赖的组织id -->
<groupId>org.polaris</groupId>
<!-- 依赖的所属项目id -->
<artifactId>xxx</artifactId>
<!-- 依赖的版本号 -->
<version>xxx</version>
</dependency>
</dependencies>
示例:
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
5.2. 依赖传递
依赖具有传递性:
直接依赖:在当前项目中通过依赖配置建立的资源关系。
间接依赖:被资源的资源如果依赖其他资源,那么当前项目会间接依赖其他资源。
5.3. 依赖传递冲突问题
路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高。
- 声明优先:当资源在相同层级被依赖的时候,配置顺序靠前的覆盖配置顺序靠后的。
- 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的。
5.4. 可选依赖(不透明)
可选依赖指的是对外隐藏当前所依赖的资源。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<optional>true</optional>
</dependency>
5.5. 排除依赖(不需要)
排除依赖指的是主动断开依赖的资源,被排除的资源无需指定版本。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
5.6. 依赖范围
所依赖的jar默认情况下可以在任何地方使用,可以通过scope标签设定其作用范围。
- 主程序范围有效(main文件夹范围内)。
- 测试程序范围有效(test文件夹范围内)。
- 是否参与打包(package指令范围内)。
| scope | 主代码 | 测试代码 | 打包 | 范例 |
| —- | —- | —- | —- | —- |
| compile(默认) | √ | √ | √ | log4j |
| test |
| √ |
| junit | | provided | √ | √ |
| servlet-api | | runtime |
|
| √ | jdbc |
5.7. 依赖范围的传递性
带有依赖范围的资源在进行传递的时候,作用范围将受到影响。
compile | test | provided | runtime | |
---|---|---|---|---|
compile | compile | test | provided | runtime |
test | 不传递 | 不传递 | 不传递 | 不传递 |
provided | 不传递 | 不传递 | 不传递 | 不传递 |
runtime | runtime | test | provided | runtime |
6. 生命周期和插件
6.1. 构建生命周期
6.1.1. 项目构建生命周期
Maven对项目构建的生命周期划分为3套:
- clean:清理工作。
- default:核心工作,例如:编译、测试、打包、部署等。
-
6.1.2. clean生命周期
pre-clean:执行一些需要在clean之前完成的工作。
- clean:移除所有上一次构建生成的文件。
post-clean:执行一些需要在clean之后立刻完成的工作。
6.1.3. 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(打包):将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
- pre-integration-test(集成测试前):在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
- integration-test(集成测试):处理和部署项目到可以运行集成测试环境中。
- post-integration-test(集成测试后):在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
- verify (验证):运行任意的检查来验证项目包有效且达到质量标准。
- install(安装):安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
deploy(部署):将最终的项目包复制到远程仓库中与其他开发者和项目共享。
6.1.4. site构建生命周期
pre-site:执行一些需要在生成站点文档之前完成的工作。
- site:生成项目的站点文档。
- post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备。
- site-deploy:将生成的站点文档部署到特定的服务器上。
7. 聚合和继承
7.1. 聚合
聚合的作用:聚合用于快速构建Maven工程,一次性构建多个项目/模块。
创建项目,打包类型定义为
pom
。<!-- 定义该工程用于进行构建管理 -->
<packaging>pom</packaging>
定义当前项目进行构建操作时关联的其他模块名称。
<!-- 管理的工程列表 -->
<modules>
<!-- 具体的工程名称 -->
<module>maven-*-pojo</module>
<module>maven-*-dao</module>
<module>maven-*-service</module>
<module>maven-*-web</module>
</modules>
注意:参与聚合操作的模块最终执行顺序和模块间的依赖关系有关,和配置顺序无关。
7.2. 继承
继承的作用:通过继承可以实现在子工程中沿用父工程的配置。
在父工程中定义依赖管理。
<!-- 声明此处进行依赖管理 -->
<dependencyManagement>
<!-- 具体的依赖 -->
<dependencies>
<!-- 自定义工程依赖 -->
<!-- ...... -->
<!-- spring的环境 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!-- Spring整合Junit -->
<!-- ...... -->
<!-- mybatis的环境 -->
<!-- ...... -->
<!--mysql环境-->
<!-- ...... -->
<!--spring整合jdbc-->
<!-- ...... -->
<!--spring整合mybatis-->
<!-- ...... -->
<!--druid连接池-->
<!-- ...... -->
<!--分页插件坐标-->
<!-- ...... -->
</dependencies>
</dependencyManagement>
在子工程中声明其父工程坐标和对应的位置。
<!-- 定义该工程的父工程 -->
<parent>
<artifactId>maven-pro</artifactId>
<groupId>org.polaris</groupId>
<version>1.0</version>
<!-- 填写父工程的pom文件,如果是下面的这种格式,可以省略relativePath -->
<relativePath>../pom.xml</relativePath>
</parent>
继承的资源
- groupId:项目组ID,项目坐标的核心因素。
- version:项目版本,项目坐标的核心因素。
- description:项目的描述信息。
- organization:项目的组织信息。
- inceptionYear:项目的创始年份。
- url:项目的URL地址。
- developers:项目的开发者信息。
- contributors:项目的贡献者信息。
- distributionManagement:项目的部署配置。
- issueManagement:项目的缺陷跟踪系统信息。
- CIManagement:项目的持续集成系统信息。
- scm:项目的版本控制系统。
- malilingLists:项目的邮件列表信息。
- properties:自定义的Maven属性。
- dependencies:项目的依赖配置。
- dependencyManagement:项目的依赖管理配置。
- repositories:项目的仓库配置。
- build:包括项目的源码目录配置i、输出目录配置、插件配置、插件管理配置等。
- reporting:包括项目的报告输出目录配置、报告插件配置等。
7.3. 聚合和继承的异同点
作用
- 聚合用于快速构建项目。
- 继承用于快速配置。
- 相同点
- 聚合和继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中。
- 聚合和继承均属于设计型模块,并无实际的模块内容。
不同点
作用:等同于定义变量,方便统一维护。
定义格式:
<!-- 定义自定义属性 -->
<properties>
<spring.vresion>5.1.9.RELEASE</spring.vresion>
<mybatis.version>3.5.3</mybatis.version>
</properties>
调用格式:
<!-- 声明此处进行依赖管理 -->
<dependencyManagement>
<!-- 具体的依赖 -->
<dependencies>
<!-- spring的环境 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.vresion}</version>
</dependency>
<!-- mybatis的环境 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
8.2. 内置属性
作用:使用Maven内置属性,快速配置。
调用格式:
${basedir}
${version}
8.3. Settings属性
作用:使用Maven配置文“settings.xml”中的标签属性,用于动态配置。
调用格式:
${settings.localRepository}
8.4. Java系统属性
作用:读取Java系统属性。
调用格式:
${user.home}
系统属性查询方式:
mvn help:system
8.5. 环境变量属性
作用:使用Maven配置文
settings.xml
中的标签属性,用于动态配置。调用格式:
${env.JAVA_HOME}
环境变量属性查询方式:
mvn help:system
9. 版本管理
9.1. 工程版本
SNAPSHOT(快照版本):
- 项目开发过程中,为方便团队成员合作,解决模块间依赖和即时更新的问题,开发者对于每个模块进行构建的时候,输出的临时性版本叫做快照版本(测试阶段版本)。
- 快照版本会随着开发的进展不断的更新。
RELEASE(发布版本):
主版本:表示项目重大架构的变更,如Spring5相较Spring4的迭代。
- 次版本:表示有较大的功能增加和变化,或者全面系统地修复漏洞。
- 增量版本:表示有重大漏洞的修复。
- 里程碑版本:表示一个版本的里程碑(版本内部)。这样的版本同下一个正式版本相对,相对来说不是很稳定,有待更多的测试。
10. 资源配置
资源配置中的资源包括properties文件、applicationContext.xml文件等。 资源配置其实就是将properties、applicationContext.xml等文件中的信息配置到Maven中,由Maven统一管理,这样就可以在任意文件中加载pom文件中定义的属性了。
示例:
jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc.password=******
pom.xml ```xml
jdbc:mysql://localhost:3306/maven?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
<a name="d7150679"></a>
# 11. 多环境开发配置
<a name="a444326f"></a>
## 11.1. 多环境开发
![多环境兼容.png](https://cdn.nlark.com/yuque/0/2021/png/788484/1635929861931-8830e262-be22-4c91-ac6d-c13e3082814b.png#clientId=uf670a0fa-08a7-4&from=ui&id=u182b1e00&name=%E5%A4%9A%E7%8E%AF%E5%A2%83%E5%85%BC%E5%AE%B9.png&originHeight=330&originWidth=569&originalType=binary&ratio=1&size=21638&status=done&style=none&taskId=ud0fed9fb-dec6-4d83-ae1e-ca8dee88297)
<a name="4546ee4c"></a>
## 11.2. 多环境配置
- **pom.xml**
```xml
<!-- 创建多环境 -->
<profiles>
<!-- 定义具体的环境:开发环境 -->
<profile>
<!-- 定义环境对应的唯一id -->
<id>dev_env</id>
<!-- 定义环境中专用的属性值 -->
<properties>
<jdbc.url>jdbc:mysql://localhost:3306/maven?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true</jdbc.url>
</properties>
<!-- 设置默认启动 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 定义具体的环境:测试环境 -->
<profile>
<id>test_env</id>
<properties>
<jdbc.url>jdbc:mysql://127.0.0.1:3306/maven?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true</jdbc.url>
</properties>
</profile>
</profiles>
11.3. 加载指定环境
- 作用:加载指定环境配置。
命令:
mvn 指令 -P 环境定义id
示例:
mvn install -P test_env
12. 跳过测试
12.1. 跳过测试环境的应用场景
整体模块功能未开发。
- 模块中某个功能未开发完毕。
- 单个功能更新调试导致其他功能失败。
- 快速打包。
12.2 跳过测试
1. 使用命令跳过测试
```shell格式:mvn 指令 -D skipTests
示例
mvn install -D skipTests
注意:执行的指令生命周期必须包含测试环节。
<a name="d452a870"></a>
### 2. IDEA中使用界面跳过测试
![IDEA中使用界面跳过测试.png](https://cdn.nlark.com/yuque/0/2021/png/788484/1635934724195-90c19cba-7ab7-4b87-884e-8a436656126e.png#clientId=uf670a0fa-08a7-4&from=ui&id=u7811f0b3&margin=%5Bobject%20Object%5D&name=IDEA%E4%B8%AD%E4%BD%BF%E7%94%A8%E7%95%8C%E9%9D%A2%E8%B7%B3%E8%BF%87%E6%B5%8B%E8%AF%95.png&originHeight=423&originWidth=828&originalType=binary&ratio=1&size=25998&status=done&style=none&taskId=u3789526d-82e3-4ed8-85b7-36abe5171f8)
<a name="2a145946"></a>
### 3. 使用配置跳过测试
```xml
<build>
<!-- 使用配置跳过测试 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<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>
</plugins>
</build>
13. 私服
13.1. Nexus
Sonatype公司的一款Maven私服产品。
下载地址
- Nexus-3.x:https://help.sonatype.com/repomanager3/download
- Nexus-2.x:https://help.sonatype.com/repomanager2/download
13.2. Nexus的安装、启动和配置
Nexus本身是一个免安装软件,所以不需要像普通的Windows软件一样安装,解压即可。
Nexus-2.X:默认账号口令为admin/admin123。
Nexus-3.x:默认账号为admin,密码存储于${nexu_home}\sonatype-work\nexus\admin.password文件。
cd nexus-3.30.1-01
# 启动服务器
nexus.exe /run nexus
WebUI:http://localhost:8081
配置更新
宿主仓库hosted:保存无法从中央仓库获取的资源。
- 自主研发。
- 第三方非开源项目。
- 代理仓库proxy:代理远程仓库,通过nexus访问其它公共仓库,例如:中央仓库。
仓库组group:
- 将若干个仓库组成一个群组,简化配置。
- 仓库组不能保存资源,属于设计型仓库。
13.4. 登录Nexus
点击右上角“Sign in”进行登录,在弹出的界面会提示admin
用户的初始密码位置,根据提示即可获取密码信息。输入账户口令后,建议勾选“Disable anonymous access”,禁用匿名访问。13.5. 创建仓库
13.6. 将创建的仓库放入到maven-public仓库组中
13.7. 手动上传组件
13.8. IDEA环境中资源上传和下载
1. 概述
2. 本地仓库访问私服
配置本地仓库访问私服的权限(settings.xml)。
配置本地仓库资源来源(settings.xml)。<servers>
<!-- 配置访问服务器的权限 -->
<server>
<id>polaris-snapshots</id>
<username>admin</username>
<password>123456</password>
</server>
<server>
<id>polaris-release</id>
<username>admin</username>
<password>123456</password>
</server>
</servers>
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<mirrorOf>central</mirrorOf>
<url>
http://maven.aliyun.com/nexus/content/groups/public/
</url>
</mirror>
<!-- 配置本地仓库资源来源 -->
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>本地私服</name>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>
3. IDEA访问私服和组件上传
配置当前项目访问私服上传资源的保存位置(pom.xml)。
发布资源到私服的命令:<!-- 发布配置管理 -->
<distributionManagement>
<snapshotRepository>
<id>polaris-snapshots</id>
<url>http://localhost:8081/repository/polaris-snapshots/</url>
</snapshotRepository>
<repository>
<id>polaris-release</id>
<url>http://localhost:8081/repository/polaris-release/</url>
</repository>
</distributionManagement>
mvn deploy
13.9. 把第三方依赖放入本地仓库或者私服
第三方依赖放入本地仓库
mvn install:install-file -Dfile=ojdbc14-10.2.0.4.0.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar
第三方依赖放入私服
Maven的settings配置文件中配置第三方仓库的server信息。
<server>
<id>polaris-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
执行命令:
mvn deploy:deploy-file -Dfile=ojdbc14-10.2.0.4.0.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar -Durl=http://localhost:8081/repository/polaris-snapshots -DrepositoryId=polaris-snapshots