Maven
学习目标
1、Maven简介
2、下载与配置
3、构建Java项目、Java Web项目
4、掌握常用构建命令
5、依赖管理、传递依赖、依赖冲突
6、创建聚合工程
7、私服上传与下载 【了解】
Maven简介
读音
Maven是什么
Maven是apache下的一个开源项目,java语言开发。
Maven是一个项目管理工具,它包含了项目对象模型、标准集合、依赖管理系统以及运行定义在生命周期阶段中插件目标和逻辑。
Maven是一个项目构建工具。
Maven优点
1、一步构建:一个命令即可启动
2、依赖管理:对jar包统一管理,避免冲突等问题
3、跨平台:可在window、linux上使用
4、开发效率:Maven遵循规范开发有利于提高大型团队的开发效率,降低项目的维护成本,大公司都会考虑使用Maven来构建项目
Maven下载、安装与配置
下载和安装
下载
安装
将Maven解压到一个不含有中文和空格的目录中。
目录说明
-
bin目录 mvn.bat (以run方式运行项目)、 mvnDebug.bat(以debug方式运行项目 )
-
boot目录 Maven运行需要类加载器
-
conf目录 settings.xml 整个Maven工具核心配置文件
- lib目录 Maven运行依赖jar包
配置 : 环境变量【两处】
增加一个环境变量M2_HOME,值是Maven的安装路径(示例D:softapache-maven-3.8.4
将 %M2_HOME%/bin 加入环境变量 path
通过 mvn -v命令检查 Maven是否安装成功,看到Maven的版本为3.8.4及java版本为1.8即为安装成功。
C:UsersAdministrator>mvn -v
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: D:softapache-Maven-3.8.4
Java version: 1.8.0_311, vendor: Oracle Corporation, runtime: C:Program Files (x86)Javajdk1.8.0_311jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows server 2019", version: "10.0", arch: "x86", family: "windows"
注:如果使用的是idea2019.3 版本,只能支持3.5.x
配置 : 配置文件【三处】
是%M2_HOME%confsettings.xml文件的修改
1、本地仓库修改
- 本地仓库的默认路径为用户.m2repository
- 我们可以在setting.xml中用修改本地仓库的路径
<localRepository>D:repository</localRepository>
2、镜像仓库修改
- 一般默认的远程仓库在国内可能连接不上,所以我们可以修改远程仓库的地址为国内的镜像仓库上,镜像说明在下个节选
- 修改Maven根目录下的conf文件夹中的setting.xml文件,内容如下:
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
3、maven中编译版本
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
仓库分类与作用
仓库分类
本地仓库 :用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找。默认本地仓库位置在meven根目录下conf/settings.xml中,可看出: ${user.dir}/.m2/repository,${user.dir}表示windows用户目录。
镜像仓库:如果本地需要插件或者jar包,本地仓库没有,默认去中央仓库下载。中央仓库在国外,访问非常慢。就可以配置镜像仓库,镜像仓库一般是工厂提供的mirror仓库,在国外和国内都有服务器,不定期的去中央仓库更行更新,例如aliyun的镜像仓库。
中央仓库 :在Maven软件中内置一个远程仓库地址http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由Maven团队自己维护,里面存储了非常全的jar包,它包含了世界上大部分流行的开源项目构件。
仓库作用
Maven的工作需要从仓库下载一些jar包,如下图所示,本地的项目A、项目B等都会通过Maven软件从远程仓库或镜像仓库下载jar包并存在本地仓库,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了。
下图描述了Maven中仓库的类型
全局配置与用户配置
1、全局配置文件:%MAVEN_HOME%confsettings.xml
2、用户配置文件:${user.home}.m2settings.xml
3、Maven会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。
项目管理工具
项目对象模型
pom(Project Object Mobel)
每个maven工程中都有一个pom.xml文件(核心配置文件),通过pom.xml文件可以定义项目的坐标、打包方式、项目依赖、项目信息以及插件等。
标准集合
maven为整个项目管理过程定义了一组标准
- 标准的目录结构
- 标准的生命周期阶段
- 标准的坐标定义
依赖管理
- 通过依赖管理对项目所依赖的jar包进行统一规范的管理
项目构建工具
- 项目构建是一个项目从编写源代码到编译、测试、运行、打包、部署、运行的过程
传统项目构建过程
传统的使用eclipse构建项目的过程如下:
1、在eclipse中新建一个WEB工程。
2、进行编码及编写配置文件
3、对源代码进行编译运行,生成class文件
4、打成war包,部署至tomcat
maven项目构建过程
maven将项目构建的过程进行标准化,每个阶段使用一个命令完成,下图展示了构建过程的一些阶段
清理 mvn clean
clean是Maven工程的清理命令,执行 clean会删除target目录的内容。
编译 mvn compile
compile是Maven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下
查看 target目录,class文件已生成,编译完成。
测试 mvn test
test是Maven工程的测试命令,会执行src/test/java下的单元测试类。
cmd执行mvn test执行src/test/java下单元测试类
打包 mvn package
package是maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包。
安装 man install
install是maven工程的安装命令,完成项目编译、单元测试、打包功能,同时把打包文件部署到本地
Maven
仓库,但未部署到远程Maven
仓库。
报告 mvn site
site是Maven工程的生成站点命令,插件一般用来创建新的报告文档、部署站点等。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.7</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.3</version>
<configuration>
<locales>zh_CN</locales>
</configuration>
</plugin>
部署 mvn deploy
deploy是Maven工程的部署命令,完成项目编译、单元测试、打包功能,同时把打包文件部署到本地
Maven
仓库和远程Maven
仓库。
创建项目
命令方式
1、命令行创建普通java项目
mvn archetype:generate -DgroupId=net.wanho -DartifactId=javademo -Dversion=1.0 -DarchetypeArtifactId=maven-archetype-quickstart
2、命令行创建javaWeb项目
mvn archetype:generate -DgroupId=net.wanho -DartifactId=javawebdemo -Dversion=1.0 -DarchetypeArtifactId=maven-archetype-webapp
Idea方式
配置
注意是要在Other Settings里配置
配置一:Maven目录、配置文件地址和本地仓库地址
配置二: 自动导入Maven依赖
创建Java项目
新建Java项目
新建Java Web项目
你要选择Maven然后按照下面图片 的指示操作就可以了---》最后点击next按钮
点击Finish后项目开始创建
点击右下角查看进去
更新依赖
Java Web项目运行方式
方式一: Tomcat Server
- 热部署
IDEA还有一个好处就是热部署,这个呢在实际开发中是很管用的web开发,你后台,改了啥他就热部署,不用你重启tomcat,前台的也是,你修改jsp,css,js什么的都可以直接进行热部署,你只要自己刷新一下你的页面就行了。
式二: 使用Idea的Smart插件
方式三: 使用tomcat插件【不推荐】
pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>9090</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
管理工具深入
项目对象模型
pom.xml —— (POM)项目对象模型,也是maven项目核心配置文件
<project>
<!-- GAV坐标-->
<groupId>包名</groupId>
<artifactId>项目名</artifactId>
<version>版本</version>
<!-- 打包,默认jar -->
<packaging>jar|war|pom</packaging>
<!--所有依赖-->
<dependencies>
<!-- 某个依赖 -->
<dependency>
<groupId>包名</groupId>
<artifactId>项目名</artifactId>
<version>版本</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 插件 -->
<plugin>
</plugin>
</plugins>
</build>
</project>
标准目录
目录说明
使用Maven创建的工程称为Maven工程,Maven工程具有标准性,如下:
-
src
src/main/java —— 存放项目的.java文件
src/main/resources —— 存放项目资源文件,如spring, mybatis配置文件
src/test/java —— 存放所有单元测试.java文件,如JUnit测试类
src/test/resources —— 测试资源文件
- pom.xml —— 项目对象模型
项目名
-src
-main
-java
-package
-resources
-test
-java
-package
-resources
-pom.xml
目录创建
方式一
方式二
也可以右键项目-选择Open Module Settings打开项目配置页面更改
也可以右键项目-选择Open Module Settings打开项目配置页面更改
依赖
传统项目jar管理
在说依赖管理之前,先聊一下传统项目jar如果管理的
传统的项目工程要管理所依赖的jar包完全靠人工进行,程序员从网上下载jar包添加到项目工程中,
如下图:程序员手工将mysql、servlet、jstl等jar添加到工程中的WEB-INF/lib目录下。
1、jar包从网上不好找
2、jar包没有进行统一管理,容易造成jar包重复及版本冲突
3、jar包全部添加到工程中,造成工程过大
Maven项目的jar管理
Maven项目所依赖的jar包不需要手动向工程添加jar包,只需要在pom.xml(Maven工程的配置文件)添加依赖
什么是依赖
一个Java项目可能要使用一些第三方的jar包才可以运行,那么我们说这个java项目依赖了这些第三方的jar包。比如项目依赖lombok、mysql
什么是依赖管理
就是对项目所有依赖,进行规范化管理,通过GAV坐标。全网唯一的GAV坐标,决定使用哪一个jar包。
依赖管理一般放在pom.xml文件中
如何依赖管理
在pom.xml中添加dependency标签,如下:
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency
示例Junit4.9
<!‐‐ 添加junit4.9依赖 ‐‐>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
依赖管理优点
1、通过pom.xml文件对jar包的版本进行统一管理,可避免版本冲突。
2、Maven团队维护了一个非常全的Maven仓库,里边包括了当前使用的jar包,Maven工程可以自动从Maven仓库下载jar包,非常方便。
如何查找坐标
添加依赖需要指定依赖jar包的坐标,但是很多情况我们是不知道jar包的的坐标,可以通过如下网址查询:
网站搜索示例:
依赖范围
compile:编译范围,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行都存在
provided:provided依赖在编译和测试时需要,在运行时不需要,比如:servlet、jsp和lombok
runtime:runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc的驱动包。由于 运行时需要所以runtime范围的依赖会被打包。
test:test范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,比如:junit。由于运行时不需要所以test范围依赖不会被打包。
system:system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径,需 要指定systemPath磁盘路径,system依赖不推荐使用。
import: 导入范围,他只是用在 dependencyManagement 中,表示从其他的 pom 中导入dependecy的配置。
传递依赖
当A 依赖B、B依赖C,在A中导入B后会自动导入C,C是A的传递依赖。
举例 : junit->hmcrest
依赖冲突
当A 依赖B、B依赖C(v1.0),
当A 依赖M、M依赖C (v2.0)
如下例子:
同时加入以下依赖,观察依赖:
<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-spring-plugin -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.5.30</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.20</version>
</dependency>
Maven自动按照下边的原则调解:
第一声明者优先原则
在pom文件定义依赖,先声明的依赖为准。测试:
如果将上边struts-spring-plugins和spring-context顺序颠倒,系统将导入spring-beans-4.2.4。 分析:
由于spring-context在前边以spring-context依赖的spring-beans-4.2.4为准,所以最终spring-beans-4.2.4添加到 了工程中。
路径近者优先原则
例如:A依赖 spirng-beans-4.2.4,A依赖B依赖 spirng-beans-3.0.5,则spring-beans-4.2.4优先被依赖在A中,因为spring-beans-4.2.4相对spirng-beans-3.0.5被A依赖的路径最近。
测试:
在本工程中的pom中加入spirng-beans-4.2.4的依赖,根据路径近者优先原则,系统将导入spirng-beans-4.2.4:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
排除依赖
上边的问题也可以通过排除依赖方法辅助依赖调解,如下:
比如在依赖struts2-spring-plugin的设置中添加排除依赖,排除spring-beans,
下边的配置表示:依赖struts2-spring-plugin,但排除struts2-spring-plugin所依赖的spring-beans。
<!‐‐ struts2‐spring‐plugin依赖spirng‐beans‐3.0.5 ‐‐>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2‐spring‐plugin</artifactId>
<version>2.3.24</version>
<!‐‐ 排除 spring‐beans‐‐>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring‐beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring‐context</artifactId>
</exclusion>
</exclusions>
</dependency>
聚合与继承
聚合【父工程】
packaging 方式
<modelVersion>4.0.0</modelVersion>
<groupId>net.wanho</groupId>
<artifactId>wanlimall_parent</artifactId>
<version>1.0</version>
<!-- 模块设置-->
<modules>
<module>wanliweb</module>
</modules>
<!-- 打包方式必须为pom方式-->
<packaging>pom</packaging>
锁定版本
面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版本的方法确定依赖构件的版 本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本的为准添加到工程中,此方法在企业开发中常用。
如下的配置是锁定了spring-beans和spring-context的版本:
<dependencyManagement>
<dependencies>
<!‐‐这里锁定版本为4.2.4 ‐‐>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
注意:在工程中锁定依赖的版本并不代表在工程中添加了依赖,如果工程需要添加锁定版本的依赖则需要单独添加
<dependencies></dependencies>
标签,如下:
<dependencies>
<!‐‐这里是添加依赖 ‐‐>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐context</artifactId>
</dependency>
</dependencies>
上边添加的依赖并没有指定版本,原因是已在<dependencyManagement>
中锁定了版本,所以在<dependency>
下不需要再指定版本,当然子模块项目也可以添加版本,子模块的版本优先
dependencyManagement与pluginManagement介绍
dependencyManagement一般统一在父模块中进行声明,使用:用其实相当于一个对所有依赖jar包进行版本管理统一声明管理,但父模块中只是声明,并不真下导入。
parent/pom.xml
<dependencyManagement>
<dependencies>
<!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
child/pom.xml
<parent>
<artifactId>parent</artifactId>
<groupId>net.wanhe</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
pluginManagement理解同dependencyManagement
properties介绍
可以理解成定义的版本变量
<!--可以理解成定义的版本变量-->
<properties>
<junit_version>4.12</junit_version>
</properties>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!--引入版本变量-->
<version>${junit_version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>hamcrest-core</artifactId>
<groupId>org.hamcrest</groupId>
</exclusion>
</exclusions>
</dependency>
9.2 继承 【子工程】
子模块可以继承父模块的内容
my-app的pom文件为:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>net.wanho</groupId>
<artifactId>my-app</artifactId>
<version>1.0</version>
</project>
my-module的pom文件为:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>net.wanho</groupId>
<artifactId>my-module</artifactId>
<version>1.0</version>
</project>
我们需要my-module去继承my-app,则需要在my-module的pom文件中添加以下代码:
方式一:
|-- my-module
| -- pom.xml
-- pom.xml
<project>
<parent>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1</version>
</parent>
<groupId>com.mycompany.app</groupId>
<artifactId>my-module</artifactId>
<version>1</version>
<modelVersion>4.0.0</modelVersion>
</project>
方式二:
|-- my-module
| -- pom.xml
-- parent
-- pom.xml
<project>
<parent>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>my-module</artifactId>
</project>
三套生命周期【了解】
三套生命周期
构建过程分为三套相互独立的生命周期,请注意是“三套”,而且“相互独立”,这三套生命周期分别是:
Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
Site Lifecycle 生成项目报告,站点,发布站点。
生命周期 | 目的 | 包含的阶段 |
---|---|---|
clean | 清理 | pre-clean、clean、post-clean |
default | 构建项目 | validate、initialize、generate-sources、process-sources、 generate-resources、process-resources、compile、process-classes、 generate-test-sources、process-test-sources、generate-test-resources、 process-test-resources、test-compile、process-test-classes、test、 prepare-package、package、pre-integration-test、integration-test、 post-integration-test、verify、install、deploy |
site | 建立项 | pre-site、site、post-site、site-deploy |
标红的阶段,默认绑定了内置的插件目标,
生命周期的阶段
每个maven命令对应生命周期的某个阶段,例如:mvn clean 命令对应clean生命周期的clean阶段, mvn test 命令对应default生命周期的test阶段。
执行命令会将该命令在的在生命周期当中之前的阶段自动执行,比如:执行mvn clean 命令会自动执行pre-clean 和clean两个阶段,mvn test命令会自动执行validate、compile、test等阶段。
注意:执行某个生命周期的某个阶段不会影响其它的生命周期!
如果要同时执行多个生命周期的阶段可在命令行输入多个命令,中间以空格隔开,例如:
clean package 该命令执行clean生命周期的clean阶段和default生命周期的package阶段。
Maven私服 【了解】
需求
问题:项目组编写了一个通用的工具类,其它项目组将类拷贝过去使用,当工具类修改bug后通过邮件发送给各个项目组,这种分发机制不规范可能导致工具类版本不统一。
解决方案:项目组将写的工具类通过maven构建,打成jar,将jar包发布到公司的maven仓库中,公司其它项目通过maven依赖管理从仓库自动下载jar包。
分析
公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器即是公司内部的maven远程仓库,每个员工的电脑上安装maven软件并且连接私服服务器,员工将自己开发的项目打成jar并发布到私服服务器,其它项 目组从私服服务器下载所依赖的构件(jar)。
私服还充当一个代理服务器,当私服上没有jar包会从互联网中央仓库自动下载,如下图:
搭建私服环境
## 查找nexus3镜像
docker search nexus3
## 拉取nexus3镜像
docker pull docker.io/sonatype/nexus3
## 查看镜像
docker images
## 创建目录
mkdir -p /root/docker/nexus3/data
## 运行nexus容器
docker run -id --privileged=true --name=nexus3 --restart=always -p 8081:8081 -p 8082:8082 -p 8083:8083 -v /root/docker/nexus3/data:/nexus-data sonatype/nexus3
## 访问
http://192.168.100.205:8081
## 右上角登录,用户名 admin
## 密码,进入查看
docker exec -it nexus3 /bin/bash
vi /nexus-data/admin.password
将项目发布到私服
需求
企业中多个团队协作开发通常会将一些公用的组件、开发模块等发布到私服供其它团队或模块开发人员使用。
团队分别开发dao、service、web,某个团队开发完在dao会将dao发布到私服供service团队使用, 本例子会将dao工程打成jar包发布到私服。
配置
第一步: 需要在客户端即部署dao工程的电脑上配置 maven环境,并修改 settings.xml 文件,配置连接私服的用户和密码 。
此用户名和密码用于私服校验,因为私服需要知道上传都 的账号和密码是否和私服中的账号和密码 一致。
<server>
<id>maven-releases</id>
<username>admin</username>
<password>admin</password>
</server>
<server>
<id>maven-snapshots</id>
<username>admin</username>
<password>admin</password>
</server>
releases 连接发布版本项目仓库
snapshots 连接测试版本项目仓库
第二步: 配置项目pom.xml
配置私服仓库的地址,本公司的自己的jar包会上传到私服的宿主仓库,根据工程的版本号决定上传到哪个宿主仓库,如果版本为release则上传到私服的release仓库,如果版本为snapshot则上传到私服的snapshot仓库
<!--发布到私服仓库-->
<distributionManagement>
<repository>
<id>maven-releases</id>
<name>Nexus Release Repository</name>
<url>http://192.168.100.205:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://192.168.100.205:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
注意:pom.xml这里<id>
和 settings.xml 配置 <id>
对应!
操作命令
将项目dao工程打成jar包发布到私服:
1、首先启动nexus
2、对dao工程执行deploy命令
根据本项目pom.xml中version定义决定发布到哪个仓库,如果version定义为snapshot,执行deploy后查看nexus 的snapshot仓库,如果version定义为release则项目将发布到nexus的release仓库,本项目将发布到snapshot仓 库
从私服下载jar包
需求
没有配置nexus之前,如果本地仓库没有,去中央仓库下载,通常在企业中会在局域网内部署一台私服服务器,有 了私服本地项目首先去本地仓库找jar,如果没有找到则连接私服从私服下载jar包,如果私服没有jar包私服同时作为代理服务器从中央仓库下载jar包,这样做的好处是一方面由私服对公司项目的依赖jar包统一管理,一方面提高下载速度,项目连接私服下载jar包的速度要比项目连接中央仓库的速度快的多。
管理仓库组
nexus中包括很多仓库,hosted中存放的是企业自己发布的jar包及第三方公司的jar包,proxy中存放的是中央仓库 的jar,为了方便从私服下载jar包可以将多个仓库组成一个仓库组,每个工程需要连接私服的仓库组下载jar包。
上图中仓库组包括了本地仓库、代理仓库等。
在setting.xml中配置仓库(全局)
在客户端的setting.xml中配置私服的仓库,由于setting.xml中没有repositories的配置标签需要使用profile定义仓 库。
<mirror>
<id>Nexus</id>
<mirrorOf>*</mirrorOf>
<name>Nexus</name>
<!-- 私服地址 -->
<url>http://192.168.44.204:8081/repository/maven-public/</url>
</mirror>
还没有人赞赏,快来当第一个赞赏的人吧!
- 2¥
- 5¥
- 10¥
- 20¥
- 50¥
声明:本文为原创文章,版权归信息岛所有,欢迎分享本文,转载请保留出处!