maven详解
文章目录
一、Maven基础
1. Maven概述
1.1、Maven是什么
- Maven的本质是一个项目管理工具,将项目
开发
和管理
过程抽象成一个项目对象模型(POM)
- POM(Project Object Model):项目对象模型,把一个项目以对象的形式进行管理
- Maven的核心功能:是合理叙述项目间的依赖关系,通俗点就是通过pom.xml文件的配置获取jar包不用手动的去添加jar包,其本质就是通过配置pom.xml来获取jar包,当然这是在该项目必须是maven项目的前提下。
- 我们这样来理解maven项目,就是在java项目和web项目上裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能,即通过pom.xml添加jar包
1.2、Maven的作用
- 项目构建:提供标准的、跨平台的自动化的项目构建方式
- 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
- 统一开发结构:提供标准的、统一的项目结构
Maven可以帮我们:
- 构建工程,
- 管理jar,
- 编译代码,
- 自动运行单元测试,
- 打包,
- 生成报表,
- 部署项目,生成web站点。
1.3、环境变量配置
- 新建
MAVEN_HOME
,值为安装目录,bin目录的上一层
- 再Path中新建
%MAVEN_HOME%\Bbin
2. 两个基本概念
2.1、仓库
- 仓库:仓库用于存储资源,包含各种jar包。
- 仓库分类:
本地仓库
:自己电脑上存储资源的仓库,连接远程仓库获取资源- 远程仓库:非本机电脑上的仓库,为本地仓库提供资源
中央仓库
:Maven团队维护,存储所有资源的仓库私服
:部门/公司范围内存储资源的仓库,从中央仓库获取资源。相当于一个局域仓库
,可以复用资源。
- 私服的作用:
- 保存具有版权的资源,包含购买或自主研发的jar。
- 中央仓库的jar都是开源的,不能存储具有版权的资源。
- 一定范围内共享资源,仅对内部开放,不对外共享。
- 保存具有版权的资源,包含购买或自主研发的jar。
2.2、坐标
- 坐标:描述仓库中资源的位置。
- 坐标的主要组成:
groupId(组织ID)
:定义当前maven项目所属组织名称(通常是域名的反写,例如:org.mybatis)artifactId(项目ID)
:定义当前maven项目名称(通常是模块名称,例如CRM、SMS)version(版本号)
:定义当前项目版本号packaging
:定义该项目的打包方式。这不是maven的组成部分,但是我们需要使用。
- Maven坐标的作用:使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成。
3. 仓库配置
3.1、本地仓库配置
Maven启动后,会自动保存下载的资源到本地仓库。
默认位置是:C:\用户\用户名\.m2\repository
自定义位置:在安装目录下conf/settings.xml中<localRepository>
添加自定义目录,该标签已被注释需要自行查找,例如
<localRepository>D:\SDE\apache-maven-3.8.7-bin_2\repository</localRepository>
3.2、远程仓库配置
默认情况下我们从中央服务器下载资源默认都是从国外服务器下载,但从国外服务器下载速度很慢,为了解决这个问题阿里配置了镜像仓库,我们可以通过在setting.xml中配置,从阿里镜像仓库下载资源。
在安装目录下conf/settings.xml文件中找到<mirrors>
标签,在标签内添加以下标签:
<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、setting文件的区别
全局setting
,以上做的配置都属于全局配置,对任何版本的maven都生效。用户setting
,若我们要对不同版本做不同的配置可以自定义用户配置。- 配置方法不做介绍。
4. Maven工程目录结构
4.1、手动搭建maven目录
注意:
- java-project这一级开始才是Maven工程
- 和src同级的pom.xml不是我们创建的
4.2、手动构建Maven项目命令
搭建好目录以后,我们可以在java-project目录中打开命令终端,执行maven命令。
- mvn compile:编译,会根据pom.xml的内容下载所需插件到仓库中。
- mvn clean:清理,删除编译时下载的所有插件
- mvn test:测试程序(项目),第一次测试会下载测试所需插件,测试完后会生成
surefire-reports
文件里面有测试报告。 - mvn package:打包,打包源程序(项目),第一次打包会下载所需插件。
- mvn install:将项目安装到本地仓库。
一次可以使用多个命令,用空格分割。
5. Maven配置介绍
<!-- 指定版本和字符集 -->
<?xml version="1.0" encoding="utf-8"?>
<!-- 这里面才是真正的maven工程配置 -->
<project>
<!-- 指定pom的模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 打包方式,war为web工程,jar为Java工程 -->
<packaging>war</packaging>
<!-- 组织ID,定义当前maven项目所属组织名称(通常是域名的反写,例如:org.mybatis) -->
<groupId>com.demo</groupId>
<!-- 项目ID,即项目名称 -->
<artifactId>DEMO</artifactId>
<!-- 版本号,release线上,snapshot为开发版 -->
<version>1.0-SNAPSHOT</version>
<!-- 设置当前工程的所有依赖 -->
<dependencies>
<!-- 具体的依赖 -->
<denpendency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</denpendency>
</dependencies>
<!-- 构建,配置插件 -->
<build>
<!-- 设置插件 -->
<plugins>
<!-- 具体插件配置 -->
<plugin>
<!-- 插件仓库坐标配置 -->
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<!-- 生命周期配置 -->
<executions>
<!-- 具体生命周期配置 -->
<execution>
<!-- 打包方式 -->
<goals>
<!-- 具体打包方式 -->
<goal>jar</goal>
</goals>
<!-- 执行的声明周期 -->
<phase>test</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
5.1、依赖传递
依赖具有传递性(相当于继承性):
- 直接依赖:在当前项目通过依赖配置建立的依赖关系。
- 间接依赖:依赖的依赖是依赖的别人的依赖,即当前项目间接继承
在项目中,我们可以把别的项目的坐标作为自己的依赖,注意,是项目的坐标,不是项目中的依赖的坐标。
5.2、依赖冲突问题
当前项目和被依赖的项目中存在相同的依赖时,会存在冲突,比如版本不同。当出现冲突时,会根据优先级选择使用哪个依赖。
- 路径优先:依赖层级越深,优先级越低。即直接依赖优先级高于间接依赖。
- 声明优先:在maven中声明靠前的会覆盖靠后的。
- 特殊优先:在同级配置中,相同资源的不同版本,声明靠后的会覆盖靠前的。
5.2、可选依赖
可选依赖相当于继承中的私有性被封装,隐藏当前依赖不被传递(继承)
。
在被隐藏的依赖中配置<optional>true</optional>
即可:
<denpendency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<!-- 隐藏依赖 -->
<optional>true</optional>
</denpendency>
5.3、排除依赖
排除依赖也就是断开不想依赖的资源
,被排除的依赖不需要指定版本
。
在依赖的项目的依赖中,排除不想引用的依赖即可:
<denpendency>
<!-- 这里是依赖的项目的坐标 -->
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<!-- 排除依赖 -->
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</denpendency>
5.4、依赖的作用范围
依赖的jar默认情况下可以在任何地方使用,但可以通过<scope>
标签为其设置可作用的范围。
作用范围:
- 主程序范围有效(main文件夹范围内)
- 测试程序范围有效(test文件夹范围内)
- 是否参与打包(package指令范围内)
scope | 主代码 | 测试代码 | 打包 | 范例 |
---|---|---|---|---|
compile(默认) | Y | Y | Y | log4j |
test | Y | junit | ||
provided | Y | Y | servlet-api | |
runtime | Y | jdbc |
5.5、依赖范围传递性
依赖的范围也有传递性(继承性),当前项目和引用的资源配置的作用范围不同时,存在以下关系:
6、项目构建的生命周期
maven构建生命周期描述的是一次构建过程经历了多少个事件。从前往后分别是:
6.1、3个生命周期
maven对项目构建的生命周期划分为3个: - clean:清理工作 - default:核心工作(编译、测试、打包、部署) - site:产生报告,发布站点
6.2、clean生命周期
clean生命周期分为3个阶段:
- pre-clean:执行一些需要在clean之前完成的工作
- clean:移除所有上一次构建生成的文件
- post-clean:执行一些需要在clean之后立刻完成的工作
6.3、default生命周期
每执行一个命令,在该命令之前的命令都会执行,一直到该命令。比如执行test(测试)
命令,在test之前的所有指令都会依次执行,一直到test为止,test之后的不会执行。其他声明周期也一样。
- 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.4、site生命周期
- pre-site:执行一些需要在生成站点文档之前完成的工作
- site:生成项目的站点文档
- post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
- site-deploy:将生成的站点文档部署到特定的服务器上
7、插件
- 插件与生命周期内各阶段的指令绑定,在执行相应命令的时候其实就是运行的插件。
- maven默认在各个生命周期上都绑定有预设的功能。
- 我们也可以通过插件自定义功能。
<!-- 构建,配置插件 -->
<build>
<!-- 设置插件 -->
<plugins>
<!-- 具体插件配置 -->
<plugin>
<!-- 插件仓库坐标配置 -->
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<!-- 生命周期配置 -->
<executions>
<!-- 具体生命周期配置 -->
<execution>
<!-- 打包方式 -->
<goals>
<!-- 具体打包方式 -->
<goal>jar</goal>
</goals>
<!-- 执行的声明周期 -->
<phase>test</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
二、Maven高级
1、 分模块开发与设计
随着互联网的发展,应用的功能越来越多,项目也越来越大,我们需要将项目按功能
或模块
进行拆分,分模块对项目进行开发。具体拆分方法就不介绍了。
但由于maven中存在资源依赖关系,项目拆分后出现聚合、继承等依赖问题。下面会分别介绍。
2、聚合
由于各模块之间存在资源依赖的关系,将项目按模块划分之后,当其中一个模块升级了依赖,其他模块没有升级,就会导致项目无法运行。
为了解决这个问题,我们单独建立一个模块来统一维护各个模块,当这个单独的模块执行任何指令,其他被维护的模块都会执行相应的指令,这种工作机制就叫做聚合
。
聚合:就是多模块构建维护。
作用:快速构建maven工程,一次性构建多个模块。
创建方式:
- 创建一个空模块,打包类型为pom
- 定义这个空模块维护的其他模块
在空模块的pom.xml文件中加上以下配置即可:
<!-- 声明该工程用于构建管理其他工程,值为pom -->
<packaging>pom</packaging>
<!-- 维护的工程列表 -->
<modules>
<!-- 具体的工程模块 -->
<module>这里是工程路径</module>
<module>这里是工程路径</module>
<module>这里是工程路径</module>
<module>这里是工程路径</module>
</modules>
注意:参与聚合操作的模块最终执行的顺序与模块间的依赖关系有关,与配置无关。以依赖的链式顺序执行,即被依赖的模块会先执行。
3、继承
项目分模块后还会存在一个问题,那就是依赖的模块和被依赖的模块所引用的资源版本不一致。
我们也可以新建一个项目来统一维护,让所有模块都依赖这个项目的资源,其他模块要使用什么资源都直接配置到这个父模块即可。
作用:通过继承可以实现子工程使用父工程中的配置。
创建方式:
- 在父工程中定义依赖,直接使用聚合中建立的工程即可。
<!-- 依赖管理模块 -->
<dependencyManagement>
<!-- 依赖列表 -->
<dependencies>
<!-- 具体依赖 -->
<denpendency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</denpendency>
</dependencies>
</dependencyManagement>
- 在所有子工程中定义依赖的父类工程坐标与位置
<!-- 声明该工程的父工程,位于当前项目id前面 -->
<parent>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<relativePath>父工程pom.xml相对路径</relativePath>
</parent>
- 子工程中所有依赖不需要指明版本,统一使用父工程中的版本,只需要声明使用的依赖即可。
<!-- 依赖列表 -->
<dependencies>
<!-- 具体依赖 -->
<denpendency>
<groupId></groupId>
<artifactId></artifactId>
</denpendency>
<denpendency>
<groupId></groupId>
<artifactId></artifactId>
</denpendency>
</dependencies>
可继承的父类资源:
4、继承与聚合的区别
- 作用:
- 聚合:用于快速构建项目
- 继承:用于快速配置项目
- 相同点:
- 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom.xml文件中
- 聚合与继承均属于设计型模块,并无实际的模块内容
- 不同点:
- 聚合:在当前项目中配置关系,聚合可以感知参与聚合的模块有哪些
- 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
5、属性
这里的属性就和变量一样,定义一个属性,可以在其他地方调用,方便统一维护。
5.1、属性的分类
属性分类5大类:
- 自定义属性
- 内置属性
- Setting属性
- Java系统属性
- 环境变量属性
5.2、自定义属性
作用:等同于自定义变量,方便统一维护
定义:
- 在标签内定义,
- 格式:
<技术.属性>
- 比如定义一个version用于统一维护版本信息。
<properties>
<!-- 定义一个spring的版本属性,用于统一维护spring版本 -->
<spring.version>5.1.9.RELEASE</spring.version>
<!-- 定义一个junit的版本属性,用于统一维护junit版本 -->
<junit.version>4.1.2</junit.version>
</properties>
调用:
- 在标签内通过
${属性}
调用
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<!-- 调用spring.version属性 -->>
<version>${spring.version}</version>
</dependency>
5.3、内置属性
- {basedir}或 {object.basedir}:读取基础路径
- {version} 或 {object.version}:读取当前工程版本信息,就是那个内置的
5.4、Setting属性
- ${settings.localRepository},读取maven安装目录中的xml文件
5.5、Java系统属性
- ${user.home},读取Java系统属性
mvn help:system
,在终端执行
6、版本管理
- SNAPSHOT(快照版本):开发中的版本,或测试版本。
- RELEASE(发布版本):已经开发完上线的版本。
6.1、工程版本号约定
约定规范:
- 主版本.次版本.增量版本.里程碑版本
- 主版本:项目重大架构的变更
- 次版本:较大功能的增加和变化,或者全面修复系统漏洞
- 增量版本:表示有重大漏洞修复
- 里程碑版本:表名一个版本的里程碑(版本内部)。这一的版本同下一个正式版本相比,相对很不稳定,有待更多的测试。
- 示例:2.1.3.RELEASE
- 介绍一个应用
语义化版本号规范
: http://t.csdn.cn/ZFTV1
7、多配置文件统一管理
在之前的配置中,只有子类的pom.xml文件能读取父工程pom.xml的自定义属性,而maven项目中除了pom.xml配置文件还有其他配置文件,比如xxx.properties
文件,而该文件中是不能读取父工程的自定义属性的。
为了解决这个问题,我们可以在父工程的pom.xml文件中做以下配置,让其他配置文件也可以读取其自定义属性。
读取
格式:${xxx.属性}
在父工程pom.xml文件中开启
文件加载pom属性
<build>
<!-- 配置主程序资源文件的信息 -->
<resources>
<!-- 具体资源配置 -->
<resource>
<!-- 设置配置文件对应的位置目录,支持使用属性动态绑定路径,若单独为某个工程设置,不用动态绑定即可 -->
<directory>${project.basedir}/src/main/resources</directory>
<!-- 开启对配置文件的资源加载过滤 -->
<filtering>true</filtering>
</resource>
</resources>
<!-- 由于maven项目中所有工程的目录结构是一样的,但是在test测试文件中不希望它也同时访问父类资源,因而需要为其单独配置 -->
<testResources>
<testResource>
<!-- 设置配置文件对应的位置目录,支持使用属性动态绑定路径,若单独为某个工程设置,不用动态绑定即可 -->
<directory>${project.basedir}/src/test/resources</directory>
<!-- 开启对配置文件的资源加载过滤 -->
<filtering>true</filtering>
</testResource>
</testResources>
</build>
8、多环境开发配置
在开发中,我们有多种开发环境比如测试环境、开发环境、线上环境,在不同的环境中,我们可能需要读取不同的配置,可以通过以下配置实现:
- 在父工程pom.xml中
定义
以下配置:
<!-- 创建多环境 -->
<profiles>
<!-- 定义具体的环境:生产环境 -->
<profile>
<!-- 环境id,定义环境对应的唯一名称 -->
<id>如pro_env</id>
<!-- 定义环境中专用的属性值 -->
<properties>
<!-- 具体属性,在这里配置了,其他地方就不用再配置,比如 -->
<jdbc.url>jdbc:mysql://127.0.0.1:3306/test</jdbc.url>
</properties>
<!-- 设置默认启动,若当前环境为常用环境,可以将其设置为默认启动项,这样,在执行相干命令的时候就不用指定环境就id了 -->
<activation>
<activateByDefault>true</activateByDefault>
</activation>
</profile>
<!-- 定义具体的环境:测试环境 -->
<profile>
<!-- 定义环境对应的唯一名称 -->
<id>如dep_env</id>
<!-- 定义环境中专用的属性值 -->
<properties>
<!-- 具体属性,在这里配置了,其他地方就不用再配置,比如 -->
<jdbc.url>jdbc:mysql://127.1.1.2:3306/test</jdbc.url>
</properties>
</profile>
</profiles>
加载
指定环境,调用格式:mvn 指令 - P 环境id
- 比如:
mvn install -P pro_env
- 在idea中配置快捷执行,不用写mvn。
9、跳过测试的3种方式
9.1、方式1:IDEA中跳过
直接点这个按钮跳过测试:
9.2、方式2:在Maven指令中跳过
比如在执行install指令的时候跳过test:mav install -D skipTests
9.3、方式3:在配置文件中跳过
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>maven版本</version>
<configuration>
<!-- 跳过测试 -->
<skipTests>ture</skipTests>
<!-- 上面是跳过全部测试,而欧美也可以跳过部分测试,或只执行部分test测试文件 -->
<!-- 要执行的测试用例 -->
<includes>
<!-- 2种指定文件方式 -->
<!-- **表示任意目录下 -->
<include>**/测试文件名.java</include>
<!-- User*Test表示所有以User开头,Test结尾的文件 -->
<include>**/User*Test.java</include>
</includes>
<!-- 排除指定的测试用例 -->
<excludes>
<exclude>**/测试文件名.java</exclude>
<exclude>**/User*Test.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</pluginManagement>
10、私服
在分模块合作开发种中,员工a开发完成了自己的模块,员工b需要使用员工a开发完成的模块,那么员工a就可以将开发完成的模块上传到私服,员工b可以从私服中获取员工a开发完成的模块。
10.1、Nexus私服
Nexus是Sonatype公司的一款maven私服。 下载地址:https://help.sonatype.com/repomanager3/product-information/download
- 启动服务器(终端命令):
nexus.exe/run nexus
- 访问服务器:
http://localhost:8081
- 修改基础配置信息:
- 安装目录下etc/nexus-default.properties文件中修改,比如端口号。
- 修改服务器运行配置信息:
- 安装目录下bin/nexus.vmoptions文件中保存有nexus服务器启动对应的配置信息,例如占用内存空间。
10.2、仓库分类
资源都是存储在私服的仓库中的,而仓库也分为很多类:
- 宿主仓库hosted:保存非中央仓库的资源
- 自主研发(我们的代码)
- 第三方非开源项目(购买的资源)
- 代理仓库proxy:代理远程仓库,通过nexus访问其他公共仓库,如中央仓库
- 仓库组group:
- 将若干个仓库分成一个组,按存放资源内容将仓库分为不同的组,查找资源时按组查找
- 仓库组不能保存资源,属于设计型仓库
10.3、本地仓库访问私服配置
从图中可以看出,本地仓库(maven)要访问私服需要:用户名、密码、下载地址、上传地址
10.3.1、用户名、密码、镜像地址 配置
配置登录私服的用户名和密码。
在maven安装目录找到setting.xml
文件:
<servers>
<server>
<id>私服中的仓库名</id>
<username>私服账号</username>
<password>私服密码</password>
</server>
...
</servers>
...
<!-- 配置镜像,也就是本地仓库资源来源 -->
<mirror>
<id>私服中的仓库名</id>
<!-- *表示除了一配置的镜像,所有资源都从下面的url获取 -->
<mirrorOf>*</mirrorOf>
<!-- 私服中仓库的url,可以将要访问的仓库全部放到maven-public这个组中,直接访问这个组即可 -->
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
注意: 这里配置的是maven文件,也就是本地仓库的文件,需要和安装的私服的setting.xml
文件保持一致,因而需要将文件赋值粘贴一下。
10.3.2、本地上次私服地址配置
在父工程pom.xml
文件中配置:
<!-- 发布配置 -->
<disttributionManagement>
<!-- 发布版上传配置 -->
<repository>
<id>私服中的仓库名</id>
<!-- 上传的发布版私服仓库地址 -->
<url>http://localhost:8081/resipotry/仓库名</url>
</repository>
<!-- 开发版上传配置 -->
<snapshotRepository>
<id>私服中的仓库名</id>
<!-- 上传的私服开发版仓库地址 -->
<url>http://localhost:8081/resipotry/仓库名</url>
</snapshotRepository>
</disttributionManagement>
10.3.3、执行流程
- 先根据去找前面本地仓库配置的用户名和密码进行登录,因而两个id需要保持一致。
- 再根据去私服找相应的仓库。
10.3.4、本地发布到私服
直接通过 mvn deploy
命令就可以发布,执行命令后会去配置中找到相应url进行上传到私服。
相关文章
- maven镜像还有不支持发型版本5
- Apache Maven 高级应用(Part B)
- eclipse导入maven工程报错解决方法记录「建议收藏」
- Eclipse使用之导入Maven项目详解[通俗易懂]
- Eclipse导入Maven项目详解(新手初学)
- Eclipse使用Maven创建Web时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webap
- Maven(1) 安装与配置(配置本地仓库路径)
- maven安装下载配置详解 IDEA整合maven(1)
- IntelliJ IDEA 构建maven多模块项目详解程序员
- 使用Maven私服的好处详解程序员
- Maven学习 (二) Eclipse 上安装 Maven3插件详解程序员
- Maven学习 (三) 使用m2eclipse创建web项目详解程序员
- Maven引入Hadoop依赖报错:Missing artifact jdk.tools:jdk.tools:jar:1.6详解大数据
- springmvc+maven框架介绍详解编程语言
- 搭建nexus私服(maven)详解编程语言
- Maven仓库的使用和分类详解编程语言
- Spring+Mybatis+Maven+MySql搭建实例详解编程语言
- Apache Maven 3.6.1配置安装详解编程语言
- Maven项目配置tomcat插件实现项目自动部署到远程服务器详解编程语言
- Maven自动化部署
- 使用Maven开发用户模块的CRUD(增删改查)
- Maven安装配置和目录结构详解
- 在Maven profile中激活集成测试
- 使用Maven构建Oracle应用的最佳实践(mvn oracle)