tokenpocket钱包下载中文版苹果|maven是什么意思

作者: tokenpocket钱包下载中文版苹果
2024-03-17 09:04:50

Maven是什么? Maven的概念+作用+仓库的介绍+常用命令-腾讯云开发者社区-腾讯云

n是什么? Maven的概念+作用+仓库的介绍+常用命令-腾讯云开发者社区-腾讯云一只胡说八道的猴子Maven是什么? Maven的概念+作用+仓库的介绍+常用命令关注作者腾讯云开发者社区文档建议反馈控制台首页学习活动专区工具TVP最新优惠活动文章/答案/技术大牛搜索搜索关闭发布登录/注册首页学习活动专区工具TVP最新优惠活动返回腾讯云官网一只胡说八道的猴子首页学习活动专区工具TVP最新优惠活动返回腾讯云官网社区首页 >专栏 >Maven是什么? Maven的概念+作用+仓库的介绍+常用命令Maven是什么? Maven的概念+作用+仓库的介绍+常用命令一只胡说八道的猴子关注发布于 2020-09-27 10:29:2234.7K2发布于 2020-09-27 10:29:22举报文章被收录于专栏:Java系列学习与数据结构算法Java系列学习与数据结构算法Maven系列1在这里插入图片描述1.什么是Maven?Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。

核心功能

Maven的核心功能是合理叙述项目间的依赖关系,通俗点 就是通过pom.xml文件的配置获取jar包不用手动的去添加jar包,,这个pom.xml包我后面会叙述,不过已经学习过maven的 人应该对这个很熟悉。其本质就是通过配置pom.xml来获取jar包,当然这是在该项目必须是maven项目的前提下。那么什么是maven项目

maven项目是啥?

我们这样来理解maven项目,就是在java项目和web项目上裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能,即通过pom.xml添加jar包

就像在蜜汁鸡外面裹了一层面粉油炸一下变成了炸鸡,但是他还是一只鸡在这里插入图片描述在这里插入图片描述2.Maven能够解决什么问题在想Maven可以解决什么问题之前我们先来想想我们开发过程中经常遇到什么问题

1、我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个, 每用到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突。

2、我们辛辛苦苦写好了 Java 文件,可是只懂 0 和 1 的白痴电脑却完全读不懂,需要将它编译成二进制字节码。好歹现在这项工作可以由各种集成开发工具帮我们完成,Eclipse、IDEA 等都可以将代码即时编译。当然,如果你嫌生命漫长,何不铺张,也可以用记事本来敲代码,然后用 javac 命令一个个地去编译,逗电脑玩。

3、世界上没有不存在 bug 的代码,计算机喜欢 bug 就和人们总是喜欢美女帅哥一样。为了追求美为了减少 bug,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。

4、再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,定型打包,如果是 web 项目,还需要将之发布到服务器,供人蹂躏。

maven所帮助我们解决的问题

以上的这些问题maven都把我们解决了,没错maven可以帮我们

1构建工程,

2管理jar,

3.编译代码,

4.自动运行单元测试,

5.打包

6.生成报表,

7.部署项目,生成web站点。

有没有孙悟空得到金箍棒的感觉

在这里插入图片描述3.接下来我就举个例子让大家先见识见识maven的功能在这里插入图片描述前面我们通过web阶段的项目,要能够将项目运行起来,就必须将该项目所依赖的一些jar包添加到工程中,否则项目就不可以运行了,如果相同架构的项目有十几个,那么我们就需要将这一份jar包复制到十个不同的工程中我们一起来看看CRM工程的大小

使用传统的CRM项目在这里插入图片描述使用maven构建在这里插入图片描述4.Maven的依赖管理为什么使用maven之后文件夹就如此之小了呢?其实这我们在前面就提到过了即通过配置pom.xml的文件来配置依赖,而Maven的一个核心特征就是依赖管理,当我们涉及到多模块的项目(包含成百个模块或者子项目),管理依赖就变成了一个极为困难的任务Maven展示出了他对处理这种情形的高度控制

传统的web项目中,我们必须将工程所依赖的jar包复制到工程中,导致工程变的很大,那么maven是如何通过操作使工程变少的呢在这里插入图片描述通过图解可以发现maven工程不直接将jar包导入到工程中,而是通过再pom.xml中添加所需的jar包的坐标,这样就避免了jar直接引入进来,在需要用到jar包的时候,只要查找pom.xml文件,再通过pom.xml中的坐标,到一个专门用于存放jar包的仓库中根据坐标从而找到这些jar包,再把这些jar包拿去运行

看到这读者们可能会有疑问

1.存放jar包的仓库长什么样?

这个我们会在后面一一讲解,仓库也分为许多种类

2.通过读取pom.xml坐标,来找jar的方式会不会导致速度很慢。从而导致这些方案不可行

通过 pom.xml 文件配置要引入的 jar 包的坐标,再读取坐标并到仓库中加载 jar 包,这

样我们就可以直接使用 jar 包了,为了解决这个过程中速度慢的问题,maven 中也有索引的概念,通过建立索引,可以大大提高加载 jar 包的速度,使得我们认为 jar 包基本跟放在本地的工程文件中再读取出来的速度是一样的。这个过程就好比我们查阅字典时,为了能够加快查找到内容,书前面的目录就好比是索引,有了这个目录我们就可以方便找到内容了,一样的在 maven 仓库中有了索引我们就可以认为可以快速找到 jar 包。5.仓库的概念仓库就是存放jar包的地方,即我们前面说的通过pom.xml中通过设置索引来到仓库中寻找jar包

仓库分为:本地仓库,第三方仓库,中央仓库5.1本地仓库 用来存储从远程仓库或者中央仓库下载的插件和jar包,项目使用一些插件或jar包 优先从本地仓库查找 默认本地仓库的位置在{user.dir}/.m2/repository,{user.dir}表示 windows 用户目录。 5.2第三方仓库 d第三方仓库,又称为内部中心仓库,又称为私服 私服:一般由公司自己设立,只为本公司内部共享使用,它既可以作为公司内部构建协作和存档,也可作为公用类库镜像缓存,减少在外部访问和下载的频率使用私服为了减少对中央仓库的访问私服可以使用的是局域网,中央仓库必须使用外网。也就是一般公司都会创建这种第三方仓库,保证项目开发时,项目所需用的jar都从该仓库中拿,每个人的版本就都一样。 注意:连接私服,需要单独配置。如果没有配置私服,默认不使用5.3中央仓库

在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它含了世界上大部分流行的开源项目构件。获取jar包的过程

优先从本地仓库查找,如果本地仓库没有该jar包,如果配置了私服,就从私服中查找,私服中没有就从中央仓库中查找,然后下载到本地仓库,下次使用就可以直接从本地仓库中查找,没有配置私服则,直接从中央仓库中查找

在这里插入图片描述6.Maven java项目结构Maven工程目录结构在这里插入图片描述图中有一个target目录,是因为将该java项目进行了编译,src/main/java下的源代码就会编译成.class文件放入target目录中,target就是输出目录。

作为一个 maven 工程,它的 src 目录和 pom.xml 是必备的。

进入 src 目录后,我们发现它里面的目录结构如下:

在这里插入图片描述项目名称

--pom.xml 核心配置,项目根下

--src

--main

--java java源码目录

--resources java配置文件目录

--test

--java 源码测试目录

--resource 测试配置目录7.maven的常用命令7.1 compile

compile是maven工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target

目录下。

7.2 test

test是maven工程的测试命令,会执行 src/test/java 下的单元测试类。

cmd 执行 mvn test 执行 src/test/java 下单元测试类,下图为测试结果,运行 1 个测试用例,全部成功。

7.3 clean

clean是maven工程的清理命令,执行clean会删除target目录及其内容

7.4 package

package是maven工程的打包命令,对于java工程执行 package 打成 jar 包,对于 web 工程打成 war

包。

7.5 install

install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。

从运行结果中,可以看出:当后面的命令执行时,前面的操作过程也都会自动执行8.maven的生命周期maven对项目构建过程分为三套相互独立的生命周期,这里说的三套而且是相互独立,

这三套分别是:

Clean Lifecycle :在进行真正的构建之前进行一些清理工作。

Default Lifecycle :构建的核心部分,编译,测试,打包,部署等等。

Site Lifecycle :生成项目报告,站点,发布站点。9.maven的概念模型Maven 包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project

Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段

(phase)中插件(plugin)目标(goal)的逻辑。在这里插入图片描述9.1项目对象模型:

一个maven工程都有一个pom.xml文件。通过pom.xml文件定义项目的坐标,项目的依赖,项目的信息

插件目标等9.2依赖管理系统:

通过 maven 的依赖管理对项目所依赖的 jar 包进行统一管理。

比如:项目依赖 junit4.9,通过在 pom.xml 中定义 junit4.9 的依赖即使用 junit4.9,如下所示是 junit4.9

的依赖定义:

junit

junit

4.9

test

复制9.3 一个项目的生命周期

使用maven完成项目的构建,项目构建包括:清理,编译,部署等过程,maven将这些过程规范为一个生命周期,如下所示是生命周期的各阶段在这里插入图片描述

maven 通过执行一些简单命令即可实现上边生命周期的各各过程,比如执行 mvn compile 执行编译、

执行 mvn clean 执行清理。9.4 一组标准集合

maven将整个项目管理过程定义为一组标准集合,比如通过maven构建工程有标准的目录结构,有标准的生命周期阶段,依赖管理有标准的坐标定义9.5 插件目标maven管理项目生命周期都是基于插件完成的10.使用idea开发meven项目这个就是几个简单的参数配置一下没什么东西讲,我就放个流程图好了1.

在这里插入图片描述2.在这里插入图片描述

3.在这里插入图片描述在这里插入图片描述在这里插入图片描述

6.

在这里插入图片描述

7.

在这里插入图片描述

8.

在这里插入图片描述9.在这里插入图片描述10.在这里插入图片描述

11.

在这里插入图片描述11.获取jar包方式到中央仓库的官网上去下载

网址:

http://search.maven.org/

http://mvnrepository.com/例图:

在这里插入图片描述以上就是maven的一些基础知识,后续我会更新更高阶的maven知识

,即我们在项目中经常使用到的,喜欢的也可以关注我,创作不易,

觉得有帮助的可以点赞收藏关注本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。 原始发表:2020-09-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除前往查看jargitgithubxmljava本文分享自 作者个人站点/博客 前往查看如有侵权,请联系 cloudcommunity@tencent.com 删除。本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!jargitgithubxmljava评论登录后参与评论0 条评论热度最新登录 后参与评论推荐阅读LV.关注文章0获赞0目录Maven系列11.什么是Maven?2.Maven能够解决什么问题3.接下来我就举个例子让大家先见识见识maven的功能4.Maven的依赖管理5.仓库的概念6.Maven java项目结构7.maven的常用命令8.maven的生命周期9.maven的概念模型10.使用idea开发meven项目11.获取jar包方式相关产品与服务项目管理CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。产品介绍产品文档2024新春采购节领券社区专栏文章阅读清单互动问答技术沙龙技术视频团队主页腾讯云TI平台活动自媒体分享计划邀请作者入驻自荐上首页技术竞赛资源技术周刊社区标签开发者手册开发者实验室关于社区规范免责声明联系我们友情链接腾讯云开发者扫码关注腾讯云开发者领取腾讯云代金券热门产品域名注册云服务器区块链服务消息队列网络加速云数据库域名解析云存储视频直播热门推荐人脸识别腾讯会议企业云CDN加速视频通话图像分析MySQL 数据库SSL 证书语音识别更多推荐数据安全负载均衡短信文字识别云点播商标注册小程序开发网站监控数据迁移Copyright © 2013 - 2024 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有 深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569腾讯云计算(北京)有限责任公司 京ICP证150476号 |  京ICP备11018762号 | 京公网安备号11010802020287问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档Copyright © 2013 - 2024 Tencent Cloud.All Rights Reserved. 腾讯云 版权所有登录 后参与评论200

Maven是什么?有什么作用?Maven的核心内容简述_maven是干什么用-CSDN博客

>

Maven是什么?有什么作用?Maven的核心内容简述_maven是干什么用-CSDN博客

Maven是什么?有什么作用?Maven的核心内容简述

最新推荐文章于 2024-03-14 01:39:53 发布

kingAngel2020

最新推荐文章于 2024-03-14 01:39:53 发布

阅读量4w

收藏

529

点赞数

80

文章标签:

eclipse

maven

xml

java

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/King_wq_2020/article/details/117818277

版权

学习尚硅谷老师讲的Maven工具,以及看了网友资料,随手整理了一部分。

1、Maven是什么?

Maven是一款服务于Java平台的自动化构建工具。Maven 作为 Java 项目管理工具,它不仅可以用作包管理,还有许多的插件,可以支持整个项目的开发、打包、测试及部署等一系列行为。

传统工程我们直按把jar包放置在项目中, Maven工程真正的jar包放置在仓库中,项目中只用放置jar包的坐标。不使用Maven工具,当做 Java 项目需要第三方依赖包时,将别人打好的 Jar 包下载到本地,然后手动指定给项目。另外,比如版本控制,需要新版本怎么办,重新下载,重新指定,这个过程操作麻烦。而用了 Maven 之后,需要什么包,直接在 pom.xml 中添加几行 xml 代码(添加所依赖jar包的坐标),指定包名、版本等,就可以了,方便开发。

2、仓库

(1)仓库的分类

本地仓库:当前电脑上部署的仓库,为当前电脑上所有的Maven工程服务。

远程仓库:

[1]私服:架设在当前局域网环境下,为当前局域网范围内的所有Maven工程服务。

[2]中央仓库:架设在Internet上,为全世界的所有Maven工程服务。

[1]中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压&emsp&emsp力,同时更 快响应用户请求。

(2)仓库中保存的内容:Maven工程

[1] Maven自身所需要的插件。

[2] 第三方框架或工具的jar包(最早也是Maven工程的形式,只不过是打包成了jar包)。

[3] 我们自己开发的Maven工程(也可以放入本地仓库)。

注意:第一方是JDK,第二方是开发人员自己。

3、Maven中的重要配置文件:pom.xml

(1)含义:Project Object Model项目对象模型。

(2)pom.xml 对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置。重要程度相当于web.xml对于动态Web工程。

4、坐标

(1)数学中的坐标:

[1] 在平面中,使用X、Y两个向量可以唯一定位平面中的任何一个点

[2] 在空间中,使用X、Y、Z三个向量可以唯一定位空间中的任何一个点

(2)Maven的坐标:使用下面三个向量在仓库中唯一定位一个Maven工程(jar包)

[1] groupid:公司或组织域名倒序+项目名

com.atguigu.maven

[2] artifactid:模块名

Hello

[3] version:版本

1.0.0

5、Maven的常用命令

(1)执行与构建过程相关的Maven命令,必须进入pom.xml所在目录。与构建过程相关:编译、测试、打包、......

(2)常用命令:

[1] mvn clean:清理(会删除原来编译和测试的目录,即 target目录,但是已经 install到仓库里的包不会删除)

[2] mvn compile:编译主程序 (会在当前目录下生成一个 target里边存放编译主程序之后生成的字节码文件)

[3] mvn test-compile:编译测试程序(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件)

[4] mvn test:执行测试(会生成一个目录 surefire- reports,保存测试结果)

[5] mvn package:打包主程序(会编译、编译测试、测试、并且按照pom.xml配置把主程序打包生成jar包或者war包

[6] mvn install:安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)

[7] mvn deploy:部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到web容器中)

6、Maven依赖范围

 

 

 

 

 

 

 

 

 

 

 

 

 

 

优惠劵

kingAngel2020

关注

关注

80

点赞

529

收藏

觉得还不错?

一键收藏

知道了

4

评论

Maven是什么?有什么作用?Maven的核心内容简述

1、Maven是什么? Maven是一款服务于Java平台的自动化构建工具。Maven 作为 Java 项目管理工具,它不仅可以用作包管理,还有许多的插件,可以支持整个项目的开发、打包、测试及部署等一系列行为。 传统工程我们直按把jar包放置在项目中, Maven工程真正的jar包放置在仓库中,项目中只用放置jar包的坐标。不使用Maven工具,当做 Java 项目需要第三方依赖包时,将别人打好的 Jar 包下载到本地,然后手动指定给项目。另外,比如版本控制,需要新版本...

复制链接

扫一扫

Java项目:图书管理系统(java+SSM+jsp+mysql+maven)

02-18

一、项目简述

 功能包括(管理员和学生角色): 管理员和学生登录,图书管理,图书添加删除修改,图书 借阅,图书归还,图书查看,学生管理,借还管理,读者 管理,密码管理,信息修改等等功能。

二、项目运行

环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)

项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等。

Java项目:校园二手市场系统(java+SSM+mysql+maven+tomcat)

02-18

一、项目简述( +文档)

功能:本系统分用户前台和管理员后台。 本系统用例模型有三种,分别是游客、注册用户和系统管 理员。下面分别对这三个角色的功能进行描述: 1) 诞 游客是未注册的用户,他们可以浏览物物品,可以搜索物 品,如需购买物品,必须先注册成为网站用户。游客主要 功触吓: a.浏览物品 b.搜索物品 c.注册成为网站用户 2) 注册用户 注册用户是经过网站合法认证的用户,登录网站后可以浏 览物品、搜索物品、发布物品、关注物品、购买物品和查 看个人中心。 3) 系统管理员 系统管理员主要负责系统的后台管理工作,主要功能如 下: 用户管理,商品管理等等。

二、项目运行

环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe ( IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)

项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等。

4 条评论

您还未登录,请先

登录

后发表或查看评论

Maven的概述和使用(超详细)

weixin_44449054的博客

08-20

460

文章目录1 Maven的概述1.1 maven的概念1.2 maven的作用1.3 maven的概念模型1.4 maven仓库1.5 maven的坐标2 maven的安装2.1 本地安装2.2 IDEA整合本地maven3 IDEA创建maven工程3.1 创建一个空工程3.2 创建跳过骨架的java项目3.3 创建有骨架的java项目3.4 创建有骨架的web项目4 maven项目中pom.xml的初略介绍5 maven的常见指令6 依赖

1 Maven的概述

1.1 maven的概念

Maven是项目进

Maven 是干什么的,为什么要用【整理】

weixin_30279671的博客

06-15

246

Maven是什么,以及为什么要使用Maven

Maven是什么,以及为什么要使用Maven

参考书籍(推荐大家购买实体书):《Maven实战》(国内首本Maven著作)(Maven的安装、配置及使用入门)

1.概述

Maven是一个构建工具,服务与构建.使用Maven配置好项目后,输入简单的命令,如:mvn clean install,Maven会帮我们处理那些繁琐的任务....

什么是Maven?它可以用来做什么?

zy1992As的博客

05-02

447

Maven是Apache旗下的一个开源项目,是一个项目管理和构建工具,它基于项目对象模型(Project Object Model , 简 称: POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题。若没有通过maven进行大型项目的依赖管理,我们在开发项目时,需要引入大量的jar包。如上图所示我们开发了一套系统,代码需要进行编译、测试、打包、发布,这些操作如果需要反复进行就显得特别麻烦,而Maven提供了一套简单的命令来完成项目构建。

java maven是做什么的_maven是干什么用的

weixin_33561350的博客

02-26

9085

maven的作用是:1、在文件中添加相应的配置,maven就会自动的下载相应的jar包;2、下载依赖,只要配置的jar包所依赖的其他jar包都会被它自动下载下来; 3、可以直接通过它打包war或者jar项目。maven的作用:在文件中添加相应的配置,maven就会自动的下载相应的jar包;下载依赖,只要配置的jar包所依赖的其他jar包都会被它自动下载下来; 可以直接通过它打包war或者jar项目...

maven详细介绍

hsx200的博客

08-04

409

除了中央仓库,还可以配置其他自定义的远程仓库,例如自己搭建的私有仓库或者第三方的远程仓库。Maven构建系统会根据配置,优先从本地仓库获取依赖库,如果不存在或需要更新,则从远程仓库下载依赖库并保存到本地仓库中。如果存在,则直接从本地仓库获取;总之,Maven通过规范化和自动化的方式,简化了Java项目的构建和管理过程,提高了开发效率,并促进了团队协作。当我们处理多模块的项目,比如:包含成百上千个模块或者子项目,随着这个依赖的树的延伸和扩大,模块间的依赖关系就变得非常复杂,管理也变得很困难。

超级详细的Maven使用教程

热门推荐

进修的CODER

08-13

22万+

什么是Maven?

如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。

以往开发项目时,程序员往往需要花较多的精力在引用Jar包搭建项目环境上,而这一项工作尤为艰难,少一个Jar包...

什么是Maven?

qq_73778722的博客

05-19

2110

maven是Apache的顶级项目,解释为“专家,内行”,它是一个项目管理的工具,maven自身是纯java开发的( Theresult is a tool that can now be used for building and managing any Java-basedproject),可以使用maven对java项目进行构建、依赖管理。5.打包(package):将项目中包含的多个文件压缩成一个文件,用于安装或部署(java项目打成一个jar包,web项目打成一个war包,父工程-pom)

Maven详解(入门到精通)学习maven有这个就够了

qq_34091529的博客

06-29

2万+

为什么使用mava?为什么要使用Maven?它能帮助我们解决什么问题?①添加第三方jar包在今天的JavaEE开发领域,有大量的第三方框架和工具可以供我们使用。要使用这些jar包最简单的方法就是复制粘贴到目录下。但是这会导致每次创建一个新的工程就需要将jar包重复复制到lib目录下,从而造成工作区中存在大量重复的文件,让我们的工程显得很臃肿。而使用Maven后每个jar包本身只在本地仓库中保存一份,需要jar包的工程只需要以坐标的方式。

Java项目:校园二手市场系统(java+SSM+mysql+maven+tomcat+LW)

03-18

一、项目简述( +IW文档)

功能:本系统分用户前台和管理员后台。 本系统用例模型有三种,分别是游客、注册用户和系统管 理员。下面分别对这三个角色的功能进行描述: 1) 诞 游客是未注册的用户,他们可以浏览物物品,可以搜索物 品,如需购买物品,必须先注册成为网站用户。游客主要 功触吓: a.浏览物品 b.搜索物品 c.注册成为网站用户 2) 注册用户 注册用户是经过网站合法认证的用户,登录网站后可以浏 览物品、搜索物品、发布物品、关注物品、购买物品和查 看个人中心。 3) 系统管理员 系统管理员主要负责系统的后台管理工作,主要功能如 下: 用户管理,商品管理等等。

二、项目运行

环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe ( IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)

项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等。

Vue axios java maven spring mvc

03-30

以access数据库为例,简述, ... 2.vue在HBuilderX中原文件简单使用,组件注册,数据交互,uni-app项目,一套代码可发布多个平台,Android,Ios...绝对干货,用代码说明,超值,有什么不懂可联系我,目录中有说明有邮箱。

Java项目:学生管理系统(java+Springboot+Maven+mybatis+Vue+Mysql)

03-19

一、项目简述 本系统功能包括: 学生管理,教师管理,课程管理,成绩管理,系统管理等等。 二、项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,...

springboot+maven

10-27

博客说明请看https://blog.csdn.net/smilefyx/article/details/83449064

Java项目:医院管理系统(java+Springboot+ssm+mysql+maven)

02-11

一、项目简述 功能:该项目是用springboot+layui+shiro写的医院管理系 统,该系统的业务比较复杂,数据库一共有36张表。 项目分为门诊管理、住院管理、系统管理、统计管理、数 据中心、排班管理、仓库管理、药房...

Java项目:精美物流管理系统(java+SpringBoot+Vue+maven+Mysql)

02-28

一、项目简述 本系统功能包括: 数据统计、收件录入、发件录入、到件录入、派件录入、问题件录入、退件录入、留仓录入、装车录入、发车录入、到车录入、卸车录入、运单录入、运单编辑、运单查询、数据导入、签收...

IDEA中导入eclipse运行的java项目

最新发布

m0_59748326的博客

03-14

497

在IDEA中导入eclipse运行的java项目,亲测有效

Java八股文(Maven)

qq_63635361的博客

03-11

1060

Maven项目管理工具

maven运行spring boot项目

zhourongxiang1的博客

03-11

494

我用idea想跑一个整合flowable的spring boot项目,但是跑不起来,原因是jdk版本不够高。但是我的idea是2018版本,最高只能支持到jdk11。就想办法不用idea编译、打包、运行项目。因为spring boot是maven项目,所以可以用maven进行打包。

maven的deploy是干嘛的

11-28

Maven的deploy插件是用来将构建好的文件(包、依赖等)部署到远程仓库中,以供其他开发人员在项目中直接使用。与install插件不同的是,install只是将构建好的文件部署到本地仓库中保存。在执行deploy时,Maven会询问你的用户凭据以上传构建物件。

以下是一个使用Maven deploy插件的例子:

```shell

mvn deploy:deploy-file -DgroupId=com.example -DartifactId=my-project -Dversion=1.0.0 -Dpackaging=jar -Dfile=/path/to/my-project-1.0.0.jar -DrepositoryId=my-repo -Durl=http://myrepo.example.com/maven2/

```

这个命令将my-project-1.0.0.jar文件部署到名为my-repo的远程仓库中。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

kingAngel2020

CSDN认证博客专家

CSDN认证企业博客

码龄4年

暂无认证

64

原创

31万+

周排名

130万+

总排名

10万+

访问

等级

946

积分

21

粉丝

141

获赞

23

评论

755

收藏

私信

关注

热门文章

Maven是什么?有什么作用?Maven的核心内容简述

40699

解释JSP文件的声明及属性,<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>

7264

Mysql面试题

4538

java刷题必备排序,Arrays.sort()和Collections.sort()

4407

解决Exception in thread “main“ com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: ~link failure

4242

分类专栏

SSM

10篇

刷题

1篇

SpringMVC

2篇

Spring

Mybatis

java

16篇

Properties类

2篇

类加载器

XML文件

1篇

beans.xml

applicationContext.xml

maven

1篇

maven工程

maven工具

maven依赖

1篇

eclipse

6篇

JavaWeb

18篇

Tomcat

数据库

1篇

mysql

1篇

最新评论

Maven是什么?有什么作用?Maven的核心内容简述

魁魁又困啦:

maven本地仓库里,可以自己放jar包进去吗,我放进去怎么引用不了

java刷题必备api【常用】

Lee_jjing:

博主,s.indexOf(String str, int fromIndex); 这里应该是笔误

java刷题必备排序,Arrays.sort()和Collections.sort()

java勤学者:

如果例子能再简单一下,再好不过

MySQL下载安装(不注册),Windows (x86, 64-bit), ZIP Archive

little_kid_pea:

好忧伤啊,mysql下载以后居然不能自动注册和启动,还得自己写个配置文件,手动注册服务,再手动启动

java刷题必备排序,Arrays.sort()和Collections.sort()

m0_69874305:

谢谢分享~

大家在看

Python-VBA编程500例-005-02(入门级)

308

Python-VBA编程500例-007(入门级)

152

opencv | copyMakeBorder的用法

370

[毕设记录]@工具使用:Vscode使用技巧

86

opencv | 计算轮廓的质心

456

最新文章

线程池专题

java并发面试题

Java集合面试题

2021年73篇

目录

目录

分类专栏

SSM

10篇

刷题

1篇

SpringMVC

2篇

Spring

Mybatis

java

16篇

Properties类

2篇

类加载器

XML文件

1篇

beans.xml

applicationContext.xml

maven

1篇

maven工程

maven工具

maven依赖

1篇

eclipse

6篇

JavaWeb

18篇

Tomcat

数据库

1篇

mysql

1篇

目录

评论 4

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

Maven最全教程,看了必懂 - 知乎

Maven最全教程,看了必懂 - 知乎首发于芋道源码切换模式写文章登录/注册Maven最全教程,看了必懂芋道源码来源:http://cnblogs.com/hzg110/p/6936101.html作者:啤酒大泡泡一、为什么使用Maven这样的构建工具【why】二、maven是什么【what】三、安装maven四、第一个maven五、仓库和坐标六、依赖七、生命周期  八、Eclipse中使用maven九、maven工程的依赖高级特性十、build配置《Java 2019 超神之路》《Dubbo 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》《Spring MVC 实现原理与源码解析 —— 精品合集》《Spring Boot 实现原理与源码解析 —— 精品合集》《数据库实体设计合集》《Java 面试题 —— 精品合集》《Java 学习指南 —— 精品合集》前言:目前所有的项目都在使用maven,可是一直没有时间去整理学习,这两天正好有时间,好好的整理一下。一、为什么使用Maven这样的构建工具【why】① 一个项目就是一个工程如果项目非常庞大,就不适合使用package来划分模块,最好是每一个模块对应一个工程,利于分工协作。借助于maven就可以将一个项目拆分成多个工程② 项目中使用jar包,需要“复制”、“粘贴”项目的lib中同样的jar包重复的出现在不同的项目工程中,你需要做不停的复制粘贴的重复工作。借助于maven,可以将jar包保存在“仓库”中,不管在哪个项目只要使用引用即可就行。③ jar包需要的时候每次都要自己准备好或到官网下载借助于maven我们可以使用统一的规范方式下载jar包,规范④ jar包版本不一致的风险不同的项目在使用jar包的时候,有可能会导致各个项目的jar包版本不一致,导致未执行错误。借助于maven,所有的jar包都放在“仓库”中,所有的项目都使用仓库的一份jar包。⑤ 一个jar包依赖其他的jar包需要自己手动的加入到项目中FileUpload组件->IO组件,commons-fileupload-1.3.jar依赖于commons-io-2.0.1.jar极大的浪费了我们导入包的时间成本,也极大的增加了学习成本。借助于maven,它会自动的将依赖的jar包导入进来。二、maven是什么【what】① maven是一款服务于java平台的自动化构建工具make->Ant->Maven->Gradle名字叫法:我们可以叫妹文也可以叫麦文,但是没有叫妈文的。② 构建构建定义:把动态的Web工程经过编译得到的编译结果部署到服务器上的整个过程。编译:java源文件[.java]->编译->Classz字节码文件[.class]部署:最终在sevlet容器中部署的不是动态web工程,而是编译后的文件③ 构建的各个环节清理clean:将以前编译得到的旧文件class字节码文件删除编译compile:将java源程序编译成class字节码文件测试test:自动测试,自动调用junit程序报告report:测试程序执行的结果打包package:动态Web工程打War包,java工程打jar包安装install:Maven特定的概念-----将打包得到的文件复制到“仓库”中的指定位置部署deploy:将动态Web工程生成的war包复制到Servlet容器下,使其可以运行三、安装maven① 当前系统是否配置JAVA_HOME的环境变量② 下载maven,解压maven放在一个非中文无空格的路径下③ 配置maven的相关环境变量在环境变量增加M2_HOME,路径是maven解压后的根目录在环境变量里的path中增加maven/bin的目录④ 验证:maven -v 查看maven版本看到版本信息,恭喜你已经OK了。四、第一个maven① 创建约定的目录结构(maven工程必须按照约定的目录结构创建)根目录:工程名 |---src:源码 |---|---main:存放主程序 |---|---|---java:java源码文件 |---|---|---resource:存放框架的配置文件 |---|---test:存放测试程序 |---pop.xml:maven的核心配置文件我们按照上面的文件夹目录结构手动创建一下,不用任何IDE环境(手动的其实最有助于我们理解maven)文件内容如下在src/main/java/com/hzg/maven目录下新建文件Hello.java,内容如下package com.hzg.maven;

public class Hello {

public String sayHello(String name){

return "Hello "+name+"!";

}

}

POM文件内容:

4.0.0

com.hzg.maven

Hello

0.0.1-SNAPSHOT

Hello

junit

junit

4.0

test

② 常用maven命令mvn clean:清理mvn compile:编译主程序mvn test-compile:编译测试程序mvn test:执行测试mvn package:打包mvn install:安装执行maven命令必须进入到pom.xml的目录中进行执行进入到项目的pom.xml目录之后,就可以执行啦。1、运行 mvn compileOK,运行完毕,你在pom.xml配置的依赖的包已经导入到仓库了,问题来了,仓库默认的位置在哪?**仓库的默认位置:**c:\Usrs[登录当前系统的用户名].m2\repository刚才执行完compile之后,之前的文件夹发生了变化我们发现Hello项目里里多了一个target文件夹。文件夹的内容为:发现target里主要存放的就是编译后的字节码文件2、运行mvn test-compile,target文件夹下面除了classes之外多了test-classes文件夹3、运行mvn package,target文件夹下面又多了一个打好的jar包4、运行mvn clean,发现整个target文件夹都没了。又回到了编译之前我们手动创建的文件夹五、仓库和坐标**① pom.xml:**Project Object Model 项目对象模型。它是maven的核心配置文件,所有的构建的配置都在这里设置。**② 坐标:**使用下面的三个向量在仓库中唯一的定位一个maven工程③ maven工程的坐标与仓库中路径的关系:maven坐标和仓库对应的映射关系:[groupId][artifactId][version][artifactId]-[version].jar去本地仓库看一下此目录:org\springframework\spring-core\4.3.4.RELEASE\spring-core-4.3.4.RELEASE.jar果然是完全对应的(默认仓库地址上面说过了哦,不要说不知道在哪,没事下面我们再说一下仓库)④ 仓库仓库的分类:**1、本地仓库:**当前电脑上的仓库,路径上已经说过了哦2、远程仓库:私服:搭建在局域网中,一般公司都会有私服,私服一般使用nexus来搭建。具体搭建过程可以查询其他资料中央仓库:架设在Internet上,像刚才的springframework就是在中央仓库上六、依赖① maven解析依赖信息时会到本地仓库中取查找被依赖的jar包对于本地仓库中没有的会去中央仓库去查找maven坐标来获取jar包,获取到jar之后会下载到本地仓库对于中央仓库也找不到依赖的jar包的时候,就会编译失败了② 如果依赖的是自己或者团队开发的maven工程,需要先使用install命令把被依赖的maven工程的jar包导入到本地仓库中举例:现在我再创建第二个maven工程HelloFriend,其中用到了第一个Hello工程里类的sayHello(String name)方法。我们在给HelloFriend项目使用 mvn compile命令进行编译的时候,会提示缺少依赖Hello的jar包。怎么办呢?到第一个maven工程中执行 mvn install后,你再去看一下本地仓库,你会发现有了Hello项目的jar包。一旦本地仓库有了依赖的maven工程的jar包后,你再到HelloFriend项目中使用 mvn compile命令的时候,可以成功编译③ 依赖范围scope就是依赖的范围**1、compile,**默认值,适用于所有阶段(开发、测试、部署、运行),本jar会一直存在所有阶段。**2、provided,**只在开发、测试阶段使用,目的是不让Servlet容器和你本地仓库的jar包冲突 。如servlet.jar。**3、runtime,**只在运行时使用,如JDBC驱动,适用运行和测试阶段。**4、test,**只在测试时使用,用于编译和运行测试代码。不会随项目发布。**5、system,**类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。七、生命周期Maven有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,初学者容易将Maven的生命周期看成一个整体,其实不然。这三套生命周期分别是:**① Clean Lifecycle 在进行真正的构建之前进行一些清理工作。**Clean生命周期一共包含了三个阶段:pre-clean 执行一些需要在clean之前完成的工作clean 移除所有上一次构建生成的文件post-clean 执行一些需要在clean之后立刻完成的工作② Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。validategenerate-sourcesprocess-sourcesgenerate-resourcesprocess-resources 复制并处理资源文件,至目标目录,准备打包compile 编译项目的源代码process-classesgenerate-test-sourcesprocess-test-sourcesgenerate-test-resourcesprocess-test-resources 复制并处理资源文件,至目标测试目录test-compile 编译测试源代码process-test-classestest 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署prepare-packagepackage 接受编译好的代码,打包成可发布的格式,如 JARpre-integration-testintegration-testpost-integration-testverifyinstall 将包安装至本地仓库,以让其它项目依赖。deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享那我们在Hello的项目中执行 mvn install 命令,通过日志看看中间经历了什么?通过日志我们发现,其实执行mvn install,其中已经执行了compile 和 test 。**总结:**不论你要执行生命周期的哪一个阶段,maven都是从这个生命周期的开始执行**插件:**每个阶段都有插件(plugin),看上面标红的。插件的职责就是执行它对应的命令。③ Site Lifecycle 生成项目报告,站点,发布站点。pre-site 执行一些需要在生成站点文档之前完成的工作site 生成项目的站点文档post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备site-deploy 将生成的站点文档部署到特定的服务器上八、Eclipse中使用maven①、配置选择菜单windows-->preferences(参数)-->maven选择Installations(安装),添加你自己下载并解压好的maven目录。并打上对勾 √,点击Apply(应用)再选择User Settings目录,在User Settings中选择Browse(浏览),选择你自己maven里的conf下的settings.xml文件。插一句:settings.xml这个配置文件,主要是配置你本地仓库的路径的。不想使用默认路径,就打开文件,加上自己的路径配置。C:\Program Files\Java\repository

到此,maven整个的设置就OK了。② 使用Eclipse创建maven的Web工程1、选择菜单File-->new -->project,输入maven选择Maven Project,点击Next点击Next输入webapp,选中第一项,点击next项目就创建完成了,但是jdk的版本还有sevlet-api等jar包还没有选择创建好的工程单击右键,选择properties 并找到 Java Build Path,把jdk的版本选择你电脑上的正确的jdk版本。选择创建好的工程单击右键,选择properties 并找到 Project Facets,版本选择3.1,下面的java版本选择1.8,点击Apply选择创建好的工程单击右键,找到build path找到Libaries,添加Tomcat8.5的依赖库,点击OK九、maven工程的依赖高级特性① 依赖的传递性WebMavenDemo项目依赖JavaMavenService1 JavaMavenService1项目依赖JavaMavenService2pom.xml文件配置好依赖关系后,必须首先mvn install后,依赖的jar包才能使用。WebMavenDemo的pom.xml文件想能编译通过,JavaMavenService1必须mvn installJavaMavenService的pom.xml文件想能编译通过,JavaMavenService2必须mvn install传递性:在Eclipse中,为JavaMavenService2中增加了一个spring-core.jar包后,会惊喜的发现依赖的两个项目都自动的增加了这个jar包,这就是依赖的传递性。注意:非compile范围的依赖是不能传递的。② 依赖版本的原则:1、路径最短者优先原则Service2的log4j的版本是1.2.7版本,Service1排除了此包的依赖,自己加了一个Log4j的1.2.9的版本,那么WebMavenDemo项目遵守路径最短优先原则,Log4j的版本和Sercive1的版本一致。2、路径相同先声明优先原则这种场景依赖关系发生了变化,WebMavenDemo项目依赖Sercive1和Service2,它俩是同一个路径,那么谁在WebMavenDemo的pom.xml中先声明的依赖就用谁的版本。③ 统一管理依赖的版本:为了统一管理版本号,可以使用properties标签,里面可以自定义版本的标签名。在使用的地方使用${自定义标签名}十、build配置

WebMavenDemo

src/main/java

**/*.xml

**/*.txt

**/*.doc

org.apache.maven.plugins

maven-compiler-plugin

2.1

1.8

1.8

org.apache.maven.plugins

maven-resources-plugin

2.1

compile

UTF-8

org.apache.maven.plugins

maven-war-plugin

2.1

WebMavenDemo1

配置好build后,执行mvn package之后,在maven工程指定的target目录里war包和文件都按照配置的生成了好了,maven的所有的内容就整理完了。最后推荐个最新最全的maven依赖项版本查询网站:http://mvnrepository.com/《Java 2019 超神之路》《Dubbo 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》《Spring MVC 实现原理与源码解析 —— 精品合集》《Spring Boot 实现原理与源码解析 —— 精品合集》《数据库实体设计合集》《Java 面试题 —— 精品合集》《Java 学习指南 —— 精品合集》编辑于 2021-08-22 22:32GradleMavenSpring Boot​赞同 495​​22 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录芋

Maven 教程 | 菜鸟教程

Maven 教程 | 菜鸟教程

菜鸟教程 -- 学的不仅是技术,更是梦想!

首页

HTML

CSS

JavaScript

Vue

Bootstrap

NodeJS

Python3

Python2

Java

C

C++

C#

Go

SQL

Linux

jQuery

本地书签

首页

HTML

CSS

JS

本地书签

Search

Python3 教程

Python2 教程

Vue3 教程

vue2 教程

Bootstrap3 教程

Bootstrap4 教程

Bootstrap5 教程

Bootstrap2 教程

Maven 教程

Maven 教程

Maven 环境配置

Maven POM

Maven 构建生命周期

Maven 构建配置文件

Maven 仓库

Maven 插件

Maven 构建 Java 项目

Maven 构建 & 项目测试

Maven 引入外部依赖

Maven 项目模板

Maven 项目文档

Maven 快照(SNAPSHOT)

Maven 自动化构建

Maven 依赖管理

Maven 自动化部署

Maven Web 应用

Maven Eclipse

Maven NetBeans

Maven IntelliJ

Maven 环境配置

Maven 教程

Maven 翻译为"专家"、"内行",是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。

Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。

阅读本教程前,您需要了解的知识

本教程主要针对初学者,帮助他们学习 Maven 工具的基本功能。完成本教程的学习后你的 Apache Maven 的专业知识将达到中等水平,随后你可以学习更高级的知识了。

阅读本教程,您需要有以下基础:Java 基础。

Maven 功能

Maven 能够帮助开发者完成以下工作:

构建

文档生成

报告

依赖

SCMs

发布

分发

邮件列表

约定配置

Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构。如下所示:

目录

目的

${basedir}

存放pom.xml和所有的子目录

${basedir}/src/main/java

项目的java源代码

${basedir}/src/main/resources

项目的资源,比如说property文件,springmvc.xml

${basedir}/src/test/java

项目的测试类,比如说Junit代码

${basedir}/src/test/resources

测试用的资源

${basedir}/src/main/webapp/WEB-INF

web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面

${basedir}/target

打包输出目录

${basedir}/target/classes

编译输出目录

${basedir}/target/test-classes

测试编译输出目录

Test.java

Maven只会自动运行符合该命名规则的测试类

~/.m2/repository

Maven默认的本地仓库目录位置

Maven 特点

项目设置遵循统一的规则。

任意工程中共享。

依赖管理包括自动更新。

一个庞大且不断增长的库。

可扩展,能够轻松编写 Java 或脚本语言的插件。

只需很少或不需要额外配置即可即时访问新功能。

基于模型的构建 − Maven能够将任意数量的项目构建到预定义的输出类型中,如 JAR,WAR 或基于项目元数据的分发,而不需要在大多数情况下执行任何脚本。

项目信息的一致性站点 − 使用与构建过程相同的元数据,Maven 能够生成一个网站或PDF,包括您要添加的任何文档,并添加到关于项目开发状态的标准报告中。

发布管理和发布单独的输出 − Maven 将不需要额外的配置,就可以与源代码管理系统(如 Subversion 或 Git)集成,并可以基于某个标签管理项目的发布。它也可以将其发布到分发位置供其他项目使用。Maven 能够发布单独的输出,如 JAR,包含其他依赖和文档的归档,或者作为源代码发布。

向后兼容性 − 您可以很轻松的从旧版本 Maven 的多个模块移植到 Maven 3 中。

子项目使用父项目依赖时,正常情况子项目应该继承父项目依赖,无需使用版本号,

并行构建 − 编译的速度能普遍提高20 - 50 %。

更好的错误报告 − Maven 改进了错误报告,它为您提供了 Maven wiki 页面的链接,您可以点击链接查看错误的完整描述。

Maven 环境配置

1 篇笔记

写笔记

#0   任人欺凌小师妹  235***7627@qq.com   参考地址 838Maven 的 Snapshot 版本与 Release 版本

1、Snapshot 版本代表不稳定、尚处于开发中的版本。

2、Release 版本则代表稳定的版本。

3、什么情况下该用 SNAPSHOT?

协同开发时,如果 A 依赖构件 B,由于 B 会更新,B 应该使用 SNAPSHOT 来标识自己。这种做法的必要性可以反证如下:

a. 如果 B 不用 SNAPSHOT,而是每次更新后都使用一个稳定的版本,那版本号就会升得太快,每天一升甚至每个小时一升,这就是对版本号的滥用。

b.如果 B 不用 SNAPSHOT, 但一直使用一个单一的 Release 版本号,那当 B 更新后,A 可能并不会接受到更新。因为 A 所使用的 repository 一般不会频繁更新 release 版本的缓存(即本地 repository),所以B以不换版本号的方式更新后,A在拿B时发现本地已有这个版本,就不会去远程Repository下载最新的 B

4、 不用 Release 版本,在所有地方都用 SNAPSHOT 版本行不行?     

不行。正式环境中不得使用 snapshot 版本的库。 比如说,今天你依赖某个 snapshot 版本的第三方库成功构建了自己的应用,明天再构建时可能就会失败,因为今晚第三方可能已经更新了它的 snapshot 库。你再次构建时,Maven 会去远程 repository 下载 snapshot 的最新版本,你构建时用的库就是新的 jar 文件了,这时正确性就很难保证了。 任人欺凌小师妹   任人欺凌小师妹  235***7627@qq.com   参考地址6年前 (2018-09-30)

点我分享笔记

取消

分享笔记

昵称昵称 (必填)

邮箱邮箱 (必填)

引用地址引用地址

分类导航

HTML / CSSHTML 教程HTML5 教程CSS 教程CSS3 教程Bootstrap3 教程Bootstrap4 教程Bootstrap5 教程Font Awesome 教程Foundation 教程 JavaScriptJavaScript 教程HTML DOM 教程jQuery 教程AngularJS 教程AngularJS2 教程Vue.js 教程Vue3 教程React 教程TypeScript 教程jQuery UI 教程jQuery EasyUI 教程Node.js 教程AJAX 教程JSON 教程Echarts 教程Chart.js 教程Highcharts 教程Google 地图 教程 服务端Python 教程Python2.x 教程Linux 教程Docker 教程Ruby 教程Java 教程C 教程C++ 教程Perl 教程Servlet 教程JSP 教程Lua 教程Rust 教程Scala 教程Go 教程PHP 教程数据结构与算法Django 教程FastAPI 教程Zookeeper 教程设计模式正则表达式Maven 教程Verilog 教程ASP 教程AppML 教程VBScript 教程 数据库SQL 教程MySQL 教程PostgreSQL 教程SQLite 教程MongoDB 教程Redis 教程Memcached 教程 数据分析Python 教程NumPy 教程Pandas 教程Matplotlib 教程Scipy 教程R 教程Julia 教程 移动端Android 教程Swift 教程jQuery Mobile 教程ionic 教程Kotlin 教程 XML 教程XML 教程DTD 教程XML DOM 教程XSLT 教程XPath 教程XQuery 教程XLink 教程XPointer 教程XML Schema 教程XSL-FO 教程SVG 教程 ASP.NETASP.NET 教程C# 教程Web Pages 教程Razor 教程MVC 教程Web Forms 教程 Web ServiceWeb Service 教程WSDL 教程SOAP 教程RSS 教程RDF 教程 开发工具Eclipse 教程Git 教程Svn 教程Markdown 教程 网站建设HTTP 教程网站建设指南浏览器信息网站主机教程TCP/IP 教程W3C 教程网站品质

Advertisement

反馈/建议

在线实例

·HTML 实例

·CSS 实例

·JavaScript 实例

·Ajax 实例

·jQuery 实例

·XML 实例

·Java 实例

字符集&工具

· HTML 字符集设置

· HTML ASCII 字符集

· JS 混淆/加密

· PNG/JPEG 图片压缩

· HTML 拾色器

· JSON 格式化工具

· 随机数生成器

最新更新

·

Rust 宏

·

Seaborn 教程

·

Pandas 相关性分析

·

31.2k star, 免...

·

Dev Home —...

·

免费开源的 AI ...

·

11.2k star, 免...

站点信息

·

意见反馈

·

免责声明

·

关于我们

·

文章归档

关注微信

Copyright © 2013-2024 菜鸟教程 

runoob.com All Rights Reserved. 备案号:闽ICP备15012807号-1

微信关注

什么是Maven?Java的构建和依赖管理 - 知乎

什么是Maven?Java的构建和依赖管理 - 知乎切换模式写文章登录/注册什么是Maven?Java的构建和依赖管理Azz获取更多资讯:Apache Maven是Java开发的基石,也是Java 使用最广泛的构建管理工具。Maven简化的基于XML的配置模型使开发人员能够快速描述或掌握任何基于Java的项目的轮廓,这使得启动和共享新项目变得很容易。Maven还支持测试驱动的开发,长期项目维护,其声明性配置和广泛的插件使其成为CI / CD的流行选择。本文是对Maven的快速介绍,包括Maven POM和目录结构,以及用于构建第一个Maven项目的命令。请注意,在撰写本文时,最新的Maven版本是Maven 3.6.3。Maven vs蚂蚁和摇篮尽管Maven是最受欢迎的工具,但它并不是Java生态系统中唯一的构建工具。Ant是较早的基于XML的配置工具,它缺乏Maven的标准化的,基于约定的实践和依赖管理,但是确实提供了Maven所没有的灵活性。Gradle是一种较新的工具,可以在Maven生态系统之上运行(使用Maven的存储库),但支持使用基于Groovy或Kotlin的DSL进行配置。这三者本身就是好的构建工具,并且每个都可以集成到CI / CD流程中。重要的是为您的需求选择合适的,并知道如何正确使用它。Maven是如何工作的像许多出色的工具一样,Maven可以将曾经过于复杂的内容(配置地狱)简化为易于消化的部分。Maven包含三个组件:POM:描述Maven项目及其依赖项的文件。目录:用于描述POM中的Maven项目的标准化格式。存储库:第三方软件的存储和发现位置。Maven POM:每个使用Maven的Java项目在其根目录中都有一个POM(项目对象模型)文件。会pom.xml描述项目的依赖关系,并告诉您如何构建它。(依赖关系是项目所需的第三方软件。一些常见的示例是JUnit和JDBC。有关所有可用工具和流行依赖关系的列表,请参见Maven Central存储库。)Maven目录:Maven目录实现了所谓的约定优于配置,这是对配置地狱的一种优雅解决方案。makefileMaven 不需要开发人员为每个新项目定义布局和手动配置组件(与和Ant一样),而是建立了通用的项目结构并提供了描述其工作方式的标准文件格式。您只需插入需求,Maven就会调用依赖项并为您配置项目。集中存储库:最后,Maven使用集中存储库来发现和发布项目包作为依赖项。当您在项目中引用依赖项时,Maven会在集中式存储库中发现它,将其下载到本地存储库,然后将其安装到您的项目中。在大多数情况下,作为开发人员,所有这些都不可见。访问Maven依赖项默认情况下,Maven从Maven中央存储库解析依赖关系。常见的替代方法是JCenter,它具有更多可用的软件包。组织还发布和托管内部存储库,这些存储库可以是公共的或私有的。为了访问存储库,可以在Maven POM中指定其URL,也可以指示Maven查找其他存储库。安装MavenMaven是一个Java项目,因此在安装它之前,需要在开发环境中安装JDK。(有关下载和安装JDK的更多信息,请参见“ 什么是JDK?Java开发工具包简介 ”。)设置Java开发环境后,只需几个步骤即可安装Maven:下载最新的Maven版本(撰写本文时为Maven 3.6.3)。将apache.maven.zip文件解压缩到方便的位置。将该文件放在您的路径上。例如,在Unix或Linux系统上:export PATH=$PATH:/home/maven/。您现在应该可以访问该mvn命令。键入mvn -v以确保您已成功安装Maven。Maven POM每个Maven项目的根都是pom.xml文件。尽管XML以其乏味而著称,但在此用例中,XML实际上效果很好。Maven的POM易于阅读,并揭示了项目中正在发生的许多事情。(如果您使用过JavaScript,pom.xml则其目的类似于Node NPM的package.json文件。)清单1显示了一个非常简单的Maven pom.xml。清单1.简单的Maven POM

4.0.0

com.javaworld

what-is-maven

1.0-SNAPSHOT

Simple Maven Project

jar

junit

junit

4.12

test

了解Maven POM一旦掌握了它,POM就不会神秘了。首先,您可以浏览XML序言,该序言仅引用正式的POM模式。modelVersion但是请注意XML以开头。这告诉Maven使用什么版本的POM,在本例中为Maven POM 4.0.0。接下来,你有groupId,artifactId和version。这三个属性一起唯一地标识了存储库中每个Maven管理的资源。文件顶部的这些属性描述了您的Maven项目。现在,看一下dependenciesPOM 的部分,我们在其中描述项目的依赖关系。在这种情况下,到目前为止,我们仅引入了一种依赖关系,即JUnit。请注意,JUnit的也在其来描述groupId,artifactId和version。无论您是描述自己的项目还是项目依赖项,这些值始终告诉Maven在Maven存储库中找到项目的位置以及可以使用的版本。将项目托管在Maven存储库中请记住,POM定义了项目需要运行的所有内容,但同时也将项目描述为潜在的依赖项。如果您要构建一个将成为依赖项的项目(例如,创建供其他项目使用的库),则需要通过以下四种方式之一使它可用:使其在本地可用。发布到私有管理的远程存储库。发布到基于云的私有存储库。发布到Maven Central等公共资源库。在第一种情况下,根本不使用远程存储库。相反,其他开发人员将使用以下mvn install命令将您的项目下载并本地安装到其Maven存储库中。在第二种情况下,您使用托管的Maven存储库,使用私有控制的服务器发布和下载依赖项。为此,您需要一个仓库管理器,例如Apache Archiva。较新的替代方法是使用私有远程仓库,但依靠基于云的服务来管理它,例如Cloudsmith。这带来了远程托管的依赖项的好处,而无需建立回购服务器。当然,这项服务是收费的。最后,一小部分项目将最终存储在Central Maven存储库或JCenter中,这些存储库旨在用于广泛使用的公共软件包。如果要创建供其他人使用的开源依赖项,则需要这些集中存储库之一才能使您的工作对全世界可用。了解有关在Maven存储库中托管项目的更多信息,并获取可用存储库的列表。请参阅有关Maven Release Plugin的Maven官方文档,该文档用于准备和管理发布到Maven存储库的软件。编译Maven包如果您pom.xml从清单1 创建了并将其放在目录中,则可以对其执行Maven命令。Maven有许多命令,并且可以通过plugin获得更多命令,但是您只需要知道一些入门即可。对于第一个命令,请尝试执行mvn package。即使您还没有任何源代码,执行此命令也会告诉Maven下载JUnit依赖项。您可以检查Maven的日志记录输出以查看依赖项是否已加载。依赖范围您可能已经注意到示例POM中的JUnit依赖项被标记为scope test。范围是依赖管理中的一个重要概念,从本质上讲,您可以定义和限制在项目中如何调用和使用每个依赖。该test范围确保运行测试时,而不是当应用程序被打包用于部署的依赖是可用的。另一个常见的作用域是provided,它告诉框架依赖关系是由运行时环境提供的。部署到Servlet容器时,通常会在Servlet JARS中看到这种情况,因为该容器将提供那些JARS。有关Maven依赖范围的完整列表,请参见Apache Maven文档。Maven的目录结构完成命令后,请注意Maven已创建/target目录。这是项目输出的标准位置。您下载的依赖项将/target与已编译的应用程序工件一起位于目录中。接下来,您要添加一个Java文件,该文件将放置在Maven src/目录中。创建一个/src/main/java/com/javaworld/Hello.java文件,其内容如清单2所示。清单2. Hello.javacom.javaworld

public class Hello {

public static void main(String[] args){

System.out.println("Hello, JavaWorld");

}

}该/src路径是你的项目的源文件的标准点。大多数项目都将其主文件放入其中/src/main/,而Java文件则放在.class下的classpath中/java。此外,如果您要包括非代码资产(例如配置文件或图片),则可以使用/src/main/resources。此路径中的资产将添加到主类路径。测试文件进入/src/test/java。回顾一下,这是Maven项目结构(由Maven标准目录结构定义)的一些关键部分:Maven标准目录结构的关键部分pom.xml项目描述符文件/ src / main / java源文件的位置/ src / main / resources非来源资产的位置/ src / test / java测试源文件的位置/目标构建输出的位置管理您的Maven项目该mvn package命令指示Maven捆绑项目。准备好将所有项目文件收集到一个位置时,发出此命令。回想一下,在该项目的POM文件中,我们将打包类型设置为jar,因此此命令告诉Maven将应用程序文件打包到JAR中。Maven提供了许多其他选项来控制JAR的管理方式(无论是胖JAR还是瘦JAR),并指定可执行文件mainclass。请参阅Maven文档,以了解有关Maven中文件管理的更多信息。捆绑项目后,您可能需要发出mvn install。此命令将项目推送到本地Maven存储库中。将其放入本地存储库后,即可用于本地系统中的其他Maven项目。这对于您和/或您的团队正在创建尚未发布到中央存储库的依赖项JAR的开发场景很有用。其他Maven命令mvn test当您准备好运行在/src/java/test目录中定义的单元测试时,请输入。输入mvn compile当你准备好编译项目的类文件。如果您正在运行热部署设置,则此命令将触发热部署类加载器。(热部署工具(如Spring Boot的mvn spring-boot:run命令)将监视类文件中的更改,而编译将导致源文件被编译,正在运行的应用程序将反映这些更改。)开始一个新项目:Maven和Spring中的原型一个Maven原型是用于启动基于各种预先定义的设置,新项目的模板。每个原型都提供了预先打包的依赖关系,例如Java EE或Java Web应用程序项目。您还可以从现有项目中创建新的原型,然后使用它来基于这些预定义的布局快速创建新项目。请参阅Maven文档以了解有关Apache Maven原型的更多信息。与Maven配合良好的Spring框架提供了附加的,复杂的功能,可用于暂存新项目。例如,Spring Initializr是一个工具,可让您非常快速地定义新应用程序中所需的元素。Initializr本质上不是Maven原型,但其目的相同,即基于前期规范生成项目布局。在Initializr中,您可以键入mvn archetype:generate并浏览选项,以找到适合您所构建内容的原型。添加依赖在开发或维护软件时,您将需要不时向现有项目中添加新功能。幸运的是,Maven使添加新功能非常容易。假设您正在处理清单1中定义的项目,并且意识到您需要Apache Commons Language库中的一些实用程序。您可以轻松地将该依赖关系插入到JUnit之后的原始POM文件中,如清单3所示。清单3.添加一个依赖

org.apache.commons

commons-lang3

3.0

查找依赖关系也很容易。为此,您只需在网络浏览器中键入“ maven stringutils”,它就会显示出来。或者,您可以直接搜索Central Maven存储库。当您在项目主页或其他资源上阅读依赖时,您可能还会找到所需依赖的链接。只需剪切并粘贴URL,并确保记下正确的版本号,就可以了。结论Maven之所以如此常用是因为它运行良好并且足够成熟,可以处理您向它扔的任何东西。了解Maven并将其用作项目的基础可释放Java生态系统中为您提供的大量功能。要想尽一切可能,请考虑签出这些项目中的任何一个,这些项目都可以通过Maven核心插件进行访问。Maven核心插件Maven-surefire-插件在专用的类加载器中运行单元测试。spring-boot-maven-plugin用于通过spring-boot:run运行spring应用。Maven部署插件用于将程序包发布到远程存储库。Maven组装插件用于构建胖或超级JAR,意味着JAR文件将所有依赖项和资产包含在一个文件中,并且可以按原样运行。Maven的阴影插件用于构建胖JAR,从而可以删除未使用的文件或重命名冲突的文件。发布于 2020-03-27 14:44Java 项目开发JavaMaven​赞同​​添加评论​分享​喜欢​收藏​申请

Maven详解:让Java项目管理更简单 - 知乎

Maven详解:让Java项目管理更简单 - 知乎切换模式写文章登录/注册Maven详解:让Java项目管理更简单Dummer哇咔咔,你好啊一、前言1.1 Maven是什么?Maven是一个基于Java的构建工具,可以帮助开发者快速构建、管理和发布Java项目。它利用了项目对象模型(Project Object Model,POM)来描述项目构建的过程,包括编译、测试、打包等各个阶段,并提供了丰富的插件和依赖机制,实现了对Java项目的自动化管理。1.2 为什么需要Maven?在Java开发过程中,我们通常需要处理大量的依赖库和构建过程,这些操作往往需要消耗大量的时间和精力。Maven通过约定大于配置的方式,提供了一种规范化的项目管理方式,使得Java项目的构建过程更加简单、高效和可维护。具体来说,Maven的好处包括:依赖管理:Maven提供了一个中央仓库和本地仓库的机制,帮助开发者方便获取第三方库并进行版本控制。自动化构建:Maven提供了一套生命周期,简化了项目的构建流程,同时还提供了多个插件,可以根据需要完成各种任务,例如打包、测试、部署等。规范化项目结构:Maven采用了一种统一的项目结构,使得不同项目之间更容易共享和协同开发。代码质量管理:Maven可以帮助我们进行代码质量分析、测试覆盖率检查等,提高代码质量和可维护性。下面通过一个简单的示例来说明Maven的依赖管理功能。首先,在pom.xml文件中声明需要的依赖:

junit

junit

4.12

test

上述代码表示需要引入JUnit 4.12版本,并且只在测试阶段使用。当我们运行mvn test命令时,Maven会自动下载并添加依赖到项目中,并运行测试用例。这样,我们就不需要手动从其他网站下载第三方库,并将其添加到项目中,大大简化了依赖管理的工作。二、Maven的基础使用官方主页: https://maven.apache.org/2.1 安装与配置Windows系统下安装与配置Maven 访问Maven官网,下载最新的稳定版Maven:https://maven.apache.org/download.cgi 解压缩并将Maven添加到系统环境变量中: 解压下载的Maven二进制压缩包到任意目录,例如C:\MyTools\apache-maven-3.8.2 将Maven bin目录添加到系统环境变量中,例如C:\MyTools\apache-maven-3.8.2\bin 打开命令提示符或PowerShell,输入以下命令验证Maven是否安装成功: bash mvn -version Maven默认会从Maven中央仓库下载jar包,由于国内网络问题可能很慢。可以使用阿里云的maven镜像代替中央仓库,通过修改Maven的配置文件settings.xml实现: 下载一个阿里云的maven仓库的配置模板:https://developer.aliyun.com/mirror/maven/ 将配置文件settings.xml复制到Maven的conf目录下,例如:C:\MyTools\apache-maven-3.8.2\conf 在settings.xml中添加下节点:

aliyunmaven

*

阿里云公共仓库

https://maven.aliyun.com/repository/public

上述配置表示将Maven中央仓库的访问地址替换为阿里云的maven仓库。Linux系统下安装与配置Maven下载最新的稳定版Maven:bash wget https://www.apache.org/dyn/closer.lua/maven/maven-3/3.8.2/binaries/apache-maven-3.8.2-bin.tar.gz -P /tmp解压并安装Maven:bash sudo tar xf /tmp/apache-maven-*.tar.gz -C /opt sudo ln -s /opt/apache-maven-3.8.2 /opt/maven设置环境变量:bash sudo nano /etc/profile.d/maven.sh添加以下内容:bash export JAVA_HOME=/usr/lib/jvm/default-java export M2_HOME=/opt/maven export MAVEN_HOME=/opt/maven export PATH=${M2_HOME}/bin:${PATH}保存并退出,然后执行以下命令生效:bash source /etc/profile.d/maven.sh验证Maven是否安装成功:bash mvn --versionmacOS系统下安装与配置Maven使用Homebrew安装Maven:bash brew install maven验证Maven是否安装成功:bash mvn --version2.2 Maven的目录结构Maven推荐使用一种特定的目录结构组织项目文件,如下所示:myproject/

|-- pom.xml

`-- src

|-- main

| |-- java

| |-- resources

| `-- webapp

`-- test

|-- java

`-- resources其中pom.xml是Maven项目的核心文件,定义了项目的基本信息、依赖关系、插件等。src/main目录存放主要代码文件,src/test目录存放测试代码文件。2.3 Maven的生命周期Maven的生命周期包含三个阶段:clean、default和site。其中default是最核心的生命周期,它包含了项目构建的所有阶段,如下所示:验证(validate):验证项目是否正确且所有必要的信息可用。编译(compile):将源代码编译成可执行的Java字节码。测试(test):使用JUnit等测试框架执行单元测试。打包(package):将编译后的class文件打成jar、war、ear等格式的包。集成测试(integration-test):在集成环境中执行测试,例如使用Selenium自动化测试Web应用程序。验证(verify):运行集成测试以验证包的正确性。安装(install):将打包的程序安装到本地仓库,以便其他项目可以使用。部署(deploy):将打包的程序复制到远程仓库,以便其他开发人员可以使用。在执行Maven命令时,默认只会运行default生命周期中的阶段。例如,如果我们执行以下命令:mvn packageMaven会依次运行validate、compile、test和package这四个阶段。2.4 Maven的依赖管理Maven的依赖管理机制为Java项目中依赖库的引入和版本升级提供了很大的便利。我们可以在pom.xml文件中声明需要的依赖,Maven会自动下载并安装适当版本的库。例如:

junit

junit

4.12

test

上述代码表示需要引入JUnit 4.12版本,并且只在测试阶段使用。Maven会自动从中央仓库中下载JUnit库,并添加到项目中。Maven还支持传递性依赖管理,即如果某个依赖库需要依赖其他库,那么Maven会自动处理传递性依赖关系。同时,Maven还支持依赖库的排除和冲突解决等功能。三、Maven的高级特性3.1 Maven的插件机制Maven的插件机制是其功能强大的原因之一,它允许开发人员轻松地扩展Maven的能力,以满足自己的需求。插件的概念在Maven中,插件(Plugin)是构建过程中的一个执行单元。每次运行Maven命令时,都有一系列的插件被执行。插件通常用于完成某些指定任务,例如编译、测试、打包、部署等。Maven本身提供了大量的插件,同时也支持开发者自定义插件。插件的声明在pom.xml文件中声明插件,需要在plugins节点下添加一个plugin子节点,其中必须指定插件的groupId、artifactId和version三个参数。

org.apache.maven.plugins

maven-compiler-plugin

3.8.1

上述代码表示引用了Maven的maven-compiler-plugin插件,并将其版本指定为3.8.1。插件的执行使用Maven插件可以通过mvn命令来调用,命令格式如下:mvn pluginName:goalName其中,pluginName表示插件的名称,goalName表示插件的目标(即插件要完成的任务)。例如,要编译Java代码,可以执行以下命令:mvn compiler:compile该命令会调用Maven自带的maven-compiler-plugin插件,并执行其compile目标,编译Java源代码。在执行过程中,Maven会自动下载并安装需要的依赖库。3.2 Maven的仓库管理Maven的仓库管理机制是其强大依赖管理能力的基础。在Maven中,有两种类型的仓库:本地仓库和远程仓库。本地仓库本地仓库是存储本地项目依赖库的地方,位于本地文件系统中。当我们在pom.xml文件中定义一个依赖时,Maven会首先从本地仓库中查找对应的库,如果本地不存在,则会从远程仓库中下载并安装。Maven默认情况下将本地仓库存放在用户目录下的.m2目录中。该目录中包含三个子目录:repository、settings和wrapper。其中,repository子目录存放所有下载的库;settings子目录存放用户的Maven配置文件;wrapper子目录存放MavenWrapper的相关文件。远程仓库远程仓库是存储库的起源地,它包含了所有公共可用的库。当本地仓库中不存在所需的库时,Maven会尝试从配置的远程仓库中下载并安装对应的库。Maven默认情况下会使用中央仓库(Central Repository)作为其默认的远程仓库。中央仓库是开源项目最大的、公认的、免费的Maven库收集库,包含了数万个常用的Java库和框架。仓库的配置Maven的基本配置信息以XML格式存储在settings.xml文件中,该文件位于Maven的安装目录/用户目录下的.m2目录中。在settings.xml文件中,我们可以配置Maven的镜像、代理、授权信息和仓库地址等。例如,我们可以通过以下方式配置阿里云的maven仓库:

aliyun

*

http://maven.aliyun.com/nexus/content/groups/public/

aliyun

aliyun

aliyun maven

http://maven.aliyun.com/nexus/content/groups/public/

true

false

aliyun

该配置表示使用阿里云的maven仓库,同时禁用快照版本。在这种配置下,如果本地仓库中不存在相应的库,则会从阿里云的maven仓库中下载并安装。3.3 Maven的多模块项目Maven支持将一个大型项目分成多个子模块,每个子模块可以有自己的pom.xml文件、源代码和依赖库等信息。多模块项目的创建创建一个多模块项目可以采用如下的命令:mvn archetype:generate -DgroupId=com.mycompany.app

-DartifactId=my-app-parent

-DarchetypeGroupId=org.apache.maven.archetypes

-DinteractiveMode=false其中,-DgroupId指定项目的groupId,-DartifactId指定项目的artifactId,-DarchetypeGroupId指定使用的Maven原型。执行以上命令后,Maven会在当前目录下生成一个名为my-app-parent的项目,作为多模块项目的父项目。子模块的创建在多模块项目中创建子模块可以采用如下的命令:mvn archetype:generate -DgroupId=com.mycompany.app

-DartifactId=my-app-webapp

-DarchetypeGroupId=org.apache.maven.archetypes

-DinteractiveMode=false其中,-DgroupId指定项目的groupId,-DartifactId指定项目的artifactId,-DarchetypeGroupId指定使用的Maven原型。执行以上命令后,Maven会在当前目录下生成一个名为my-app-webapp的子模块项目,并将其作为my-app-parent的子模块。父项目和子模块的关系在多模块项目中,父项目和子模块之间有一个很重要的关系:子模块引用父项目。这意味着子模块可以继承来自父项目的所有设置,例如依赖管理、插件管理等。在子模块的pom.xml文件中,我们需要使用parent节点来声明该子模块所依赖的父项目:

com.mycompany.app

my-app-parent

1.0-SNAPSHOT

在父项目的pom.xml文件中,则需要使用modules节点来声明其中包含哪些子模块:

my-app-webapp

my-app-service

my-app-dao

多模块项目的构建在构建多模块项目时,我们需要先进入父项目的目录进行构建。如果只构建父项目,则会同时构建所有子模块,例如:cd my-app-parent

mvn clean install如果只想构建某个子模块,则可以进入该子模块的目录进行构建,例如:cd my-app-webapp

mvn clean package在构建子模块时,Maven会自动检查父项目是否已经被构建,如果未被构建,则先构建父项目。这样,我们就可以轻松地构建多模块项目,并快速实现应用的部署。3.4 Maven的自定义设置Maven的自定义设置可以让我们设置一些个性化偏好,以更好地适应我们的开发需求。settings.xml文件Maven的自定义设置信息存储在settings.xml文件中,该文件位于Maven的安装目录/用户目录下的.m2目录中。Maven的默认设置文件包含了一些常用的配置信息,例如:仓库地址:指定本地和远程仓库的地址。镜像设置:指定使用哪些镜像源来下载依赖库。代理设置:指定使用代理服务器来进行网络请求。证书设置:指定使用哪些证书来管理远程仓库中的库。镜像设置镜像是一个Maven仓库的映像,通俗点说就是一个网站。Maven中心库是每次构建Java项目时必须要访问的远程库,但是Maven官方中心库位于美国,由于众所周知的原因,其下载速度较慢。这时候,我们可以使用国内的Maven镜像来代替。在settings.xml文件中,我们可以通过mirrors节点来配置Maven镜像,例如:

aliyunmaven

*

阿里云公共仓库

https://maven.aliyun.com/repository/public

以上配置表示使用阿里云的中央仓库作为Maven中心库的镜像源。 #### 代理设置 在某些情况下,我们需要通过代理服务器来进行网络请求。例如,在公司内部开发环境中,网络访问需要经过代理服务器才能访问外部网站。 在settings.xml文件中,我们可以通过proxies节点来配置Maven的代理设置,例如:

myproxy

true

http

proxy.example.com

8080

myuser

mypassword

localhost|*.example.com

以上配置表示使用一个名为myproxy的代理服务器,并指定了代理服务器的地址、端口、认证信息和非代理主机列表等信息。证书设置有些远程仓库需要授权才能下载其中的库。在这种情况下,我们需要通过配置证书来实现认证。在settings.xml文件中,我们可以通过server节点来配置认证信息,例如:

myserver

myuser

mypassword

以上配置表示认证一个名为myserver的远程仓库,并指定该仓库的用户名和密码。3.5 Maven的发布过程在Maven中,发布(Release)是将一组稳定版本的代码发布到数个分发渠道的过程。发布时,我们需要完成以下任务:检查项目的代码是否处于稳定状态,即所有功能都已开发完毕、所有问题都已解决。修改pom.xml文件,更新版本号和依赖库信息,以便能够发布新版本。打包项目的代码和文档,并生成相应的发布文件。将发布文件推送到适当的分发渠道,例如Maven中心库或私有的maven仓库。发布一个Git标记来标识该代码的版本,以便后续跟踪和管理。版本号规范在Maven中,版本号由四个部分组成:主版本号、次版本号、修复级别和构建版本号。其中,主版本号和次版本号用于表示项目的主要特性,修复级别用于表示代码的补丁级别,构建版本号用于区分不同的构建版本。版本号的格式通常为X.Y.Z-SNAPSHOT,其中X表示主版本号、Y表示次版本号,Z表示修复级别。如果版本号中包含-SNAPSHOT后缀,则表示该代码正在开发中,不是稳定版本。如果不包含该后缀,则表示该代码已经发布并稳定。Maven的发布插件Maven提供了一个发布插件(Maven Release Plugin),用于简化Maven的发布流程。使用该插件可以自动完成版本号的变更、打包、推送等操作。要使用该插件,我们需要在pom.xml文件中添加以下配置:

...

...

...

org.apache.maven.plugins

maven-release-plugin

3.0.0-M1

然后,在项目的根目录下执行以下命令即可开始发布过程:mvn release:prepare

mvn release:perform以上命令会自动完成版本号的变更、SVN标记的创建、代码的打包、推送到Maven中心库等操作。四、Maven在实际项目中的应用4.1 创建一个Maven项目在开始创建一个Maven项目之前,我们需要确定以下信息:项目的groupId、artifactId和版本号。其中,groupId用于唯一标识项目所属的组织或公司,格式通常为com.company。artifactId用于唯一标识项目的名称,版本号则用于标识项目的不同版本。创建一个Maven项目可以通过命令行或IDE来完成。使用命令行创建Maven项目在命令行中使用mvn archetype:generate命令可以创建一个Maven项目。例如,要创建一个groupId为com.example、artifactId为myproject、版本号为1.0.0的Maven项目,可以执行以下命令:mvn archetype:generate -DgroupId=com.example -DartifactId=myproject -Dversion=1.0.0执行命令后,Maven会提示我们选择以哪种方式创建项目,如下所示:Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains):输入对应的编号即可选择对应的创建方式,例如选择maven-archetype-quickstart后,Maven会自动创建一个名为myproject的目录,并将初始项目结构生成到该目录中。使用IDE创建Maven项目在IDE中可以通过创建一个Maven项目来快速创建一个Maven工程。以下介绍在Eclipse和IntelliJ IDEA两种主流IDE中如何创建Maven项目。在Eclipse中创建Maven项目在Eclipse中创建Maven项目需要先安装Maven插件,然后打开Eclipse的新建项目向导即可。具体步骤如下:安装Maven插件:在Eclipse中选择"Help"->"Eclipse Marketplace",搜索Maven并安装。创建Maven项目:选择"File"->"New"->"Project",在弹出的对话框中选择"Maven"->"Maven Project",然后单击"Next"。配置Maven项目:选择一个Maven模板,输入项目的groupId、artifactId和版本号,然后单击"Finish"。等待一段时间,Maven会自动下载所需的依赖库和插件,并生成初始项目结构。在IntelliJ IDEA中创建Maven项目在IntelliJ IDEA中创建Maven项目也非常简单,只需要打开IDE的新建项目向导并选择Maven即可。具体步骤如下:创建Maven项目:在IntelliJ IDEA中选择"File"->"New"->"Project",在弹出的对话框中选择"Maven"->"Create Maven Project",然后单击"Next"。配置Maven项目:输入项目的groupId、artifactId和版本号,选择项目的类型和Java版本,并指定项目的名称和保存路径,然后单击"Finish"。等待一段时间,Maven会自动下载所需的依赖库和插件,并生成初始项目结构。4.2 构建和运行Maven项目在创建好Maven项目后,我们可以使用Maven的命令来构建和运行该项目。使用命令行构建和运行Maven项目在命令行中使用Maven命令可以构建和运行Maven项目。以下是一些常用的Maven命令:mvn clean:清除之前的构建结果。mvn compile:编译Java源代码。mvn test:运行单元测试。mvn package:打包并生成目标文件。mvn install:将目标文件安装到Maven本地仓库。mvn deploy:将目标文件部署到远程Maven仓库。mvn exec:java:运行一个主类。mvn jetty:run:启动内嵌的Jetty服务器。在IDE中构建和运行Maven项目在IDE中可以直接使用IDE的功能来构建和运行Maven项目。以下以Eclipse和IntelliJ IDEA为例介绍如何在IDE中构建和运行Maven项目。在Eclipse中构建和运行Maven项目在Eclipse中构建和运行Maven项目需要先安装Maven插件,然后打开项目的Maven菜单即可。具体步骤如下:安装Maven插件:在Eclipse中选择"Help"->"Eclipse Marketplace",搜索Maven并安装。打开Maven菜单:在Eclipse中选择"Maven"->"Lifecycle",然后选择要执行的命令即可。在IntelliJ IDEA中构建和运行Maven项目在IntelliJ IDEA中,我们可以直接使用IDE的功能来构建和运行Maven项目。具体步骤如下:打开Maven工具窗口:在IntelliJ IDEA中选择"View"->"Tool Windows"->"Maven",然后单击"Maven Projects"。构建和运行Maven项目:在Maven工具窗口中,选择要执行的Maven命令,然后右键单击该命令,并选择"Run"或"Debug"即可。4.3 在Eclipse中使用Maven在Eclipse中,我们可以使用Maven插件来管理和构建Java项目。以下是在Eclipse中使用Maven的一些常见操作。创建Maven项目在Eclipse中创建Maven项目可以通过"Maven Project"向导来完成。具体步骤如下:选择新建Maven项目:在Eclipse中选择"File"->"New"->"Other",在弹出的对话框中选择"Maven"->"Maven Project",然后单击"Next"。选择Maven模板:选择一个Maven模板,单击"Next"。配置Maven项目:输入项目的groupId、artifactId和版本号等基本信息,单击"Finish"。Maven会根据选择的模板生成初始项目结构。导入Maven项目在Eclipse中导入一个已经存在的Maven项目非常简单,只需要选择"File"->"Import"->"Maven"->"Existing Maven Projects",然后选择要导入的Maven项目即可。执行Maven命令在Eclipse中,我们可以通过"Maven"菜单或"Maven"工具栏来执行Maven命令。具体步骤如下:打开"Maven"视图:在Eclipse中选择"Window"->"Show View"->"Other",在弹出的对话框中选择"Maven"->"Maven",然后单击"OK"。选择要执行的Maven命令:在"Maven"视图中,选择要执行的Maven命令,例如"install"或"test"等,然后单击"Run As"->"Maven Build",即可执行该命令。查看Maven命令输出:在"Maven"视图中,可以查看Maven命令的输出,以及任何错误信息和警告信息。4.4 在IDEA中使用Maven在IntelliJ IDEA中,我们可以使用Maven插件来管理和构建Java项目。以下是在IntelliJ IDEA中使用Maven的一些常见操作。创建Maven项目在IntelliJ IDEA中创建Maven项目可以通过"Maven"向导来完成。具体步骤如下:选择新建Maven项目:在IntelliJ IDEA中选择"File"->"New"->"Project",在弹出的对话框中选择"Maven",然后单击"Next"。选择Maven模板:选择一个Maven模板,例如"maven-archetype-quickstart",单击"Next"。配置Maven项目:输入项目的groupId、artifactId和版本号等基本信息,选择Java版本,然后单击"Finish"。Maven会根据选择的模板生成初始项目结构。导入Maven项目在IntelliJ IDEA中导入一个已经存在的Maven项目也非常简单,只需要选择"File"->"New"->"Project from Existing Sources",然后选择要导入的Maven项目即可。执行Maven命令在IntelliJ IDEA中,我们可以通过"Maven Projects"窗口或"Maven Projects"工具栏来执行Maven命令。具体步骤如下:打开"Maven Projects"窗口:在IntelliJ IDEA中选择"View"->"Tool Windows"->"Maven",然后单击"Maven Projects"。选择要执行的Maven命令:在"Maven Projects"窗口中,选择要执行的Maven命令,例如"install"或"test"等,然后单击"Run Maven Build",即可执行该命令。查看Maven命令输出:在"Maven Projects"窗口中,可以查看Maven命令的输出,以及任何错误信息和警告信息。4.5 使用Maven管理Spring Boot项目Spring Boot是一个快速开发的Java Web框架,它基于Spring框架,简化了Spring应用的搭建和开发。使用Maven可以非常方便地管理和构建Spring Boot项目。创建Spring Boot项目可以通过Spring Initializr来创建一个Spring Boot项目,Spring Initializr是Spring官方提供的一个Web应用,可以帮助我们快速生成一个Spring Boot项目的基础结构。具体步骤如下:打开Spring Initializr:在浏览器中访问https://start.spring.io/,然后选择所需的Spring Boot版本、项目类型和语言版本等信息。配置Spring Boot项目:选择要使用的依赖库,例如Spring Web、Spring Data JPA、Thymeleaf等。下载并导入Spring Boot项目:单击"Generate"按钮,然后下载并解压生成的项目代码。在IDEA或Eclipse中导入该项目即可。使用Maven构建Spring Boot项目可以使用Maven命令来构建和打包Spring Boot项目。以下是一些常用的Maven命令:mvn clean:清除之前的构建结果。mvn compile:编译Java源代码。mvn test:运行单元测试。mvn package:打包并生成可执行的jar文件。mvn spring-boot:run:启动内嵌的Tomcat服务器。使用Spring Boot插件构建Spring Boot项目除了使用Maven命令构建外,我们还可以使用Spring Boot插件来构建和打包Spring Boot项目。在pom.xml文件中添加以下代码即可引入Spring Boot插件:

org.springframework.boot

spring-boot-maven-plugin

然后可以使用以下命令来构建和打包Spring Boot项目:mvn clean:清除之前的构建结果。mvn package:打包并生成可执行的jar文件。java -jar target/myproject.jar:启动可执行的jar文件。使用Maven管理Spring Boot依赖库使用Maven管理Spring Boot依赖库非常简单,只需要在pom.xml文件中添加所需的依赖库即可。以下是一些常用的Spring Boot依赖库:Spring Web:用于创建Web应用。Spring Data JPA:用于访问关系型数据库。Thymeleaf:用于模板引擎。Spring Security:用于安全控制。Spring Boot DevTools:开发和调试工具。例如,在pom.xml文件中添加以下代码即可引入Spring Web和Thymeleaf依赖库:

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-thymeleaf

4.6 使用Maven构建和管理Java项目的最佳实践以下是一些使用Maven构建和管理Java项目的最佳实践:将Maven的版本号设置为一个属性,方便统一管理和修改。将项目的groupId、artifactId和版本号设置为常量或属性,方便统一管理和修改。使用mvn clean命令清除之前的构建结果,以便开始新的构建。使用mvn compile命令编译Java源代码和资源文件。使用mvn test命令运行单元测试,确保代码的正确性。使用mvn package命令打包并生成目标文件,例如可执行的jar文件。使用mvn install命令将目标文件安装到Maven本地仓库,以便在其他项目中使用。使用mvn deploy命令将目标文件部署到远程Maven仓库,以便在其他项目中使用。使用mvn exec:java命令运行一个主类,例如Spring Boot应用的主类。使用mvn jetty:run命令启动内嵌的Jetty服务器,用于本地开发和测试。使用Maven插件来管理和打包项目的依赖库,例如使用Spring Boot插件来打包和运行Spring Boot应用。在项目的pom.xml文件中添加版本管理,以便统一管理和升级依赖库的版本。在项目的pom.xml文件中添加插件管理,以便统一管理和配置Maven插件。使用Maven的多模块支持来管理大型项目,将项目划分为多个模块,每个模块有独立的pom.xml文件和源代码。使用Maven的profiles来管理项目的不同构建环境,例如开发、测试和生产环境。五、总结5.1 Maven的优点和缺点优点管理依赖库方便:Maven可以自动下载并管理项目所需的依赖库,使得项目构建和部署更加简单方便。具有标准化结构:Maven强制规定项目有特定的文件结构,使得不同项目之间的协作更加易于统一。管理多模块项目方便:Maven支持多模块项目的管理,对于大型项目来说非常方便。支持自动构建、测试、打包和部署:Maven提供了许多插件和命令,可以自动完成构建、测试、打包和部署等繁琐的工作。提供了丰富的插件和扩展机制:Maven提供了众多的插件和扩展机制,可以满足不同项目的需求。社区活跃:Maven拥有庞大的社区,开发者可以获得大量的帮助和支持。缺点初学者上手难度较大:Maven的概念和配置比较复杂,初学者需要花费一定的时间去学习和理解。使用过程中需要联网:Maven需要联网才能下载依赖库,不方便在没有网络的环境中使用。一些插件和配置不够灵活:Maven提供了很多插件和配置,但是有些插件和配置不够灵活,需要进行二次开发才能满足需求。5.2 Maven未来的发展趋势Maven已经成为Java项目管理的事实标准,未来其发展趋势可能包括以下几个方面:更加强大、灵活和易用的插件和扩展机制,以满足不断变化的项目需求。更加简化、自动化和智能化的构建流程,以提高开发效率和项目质量。更加全面、统一和标准化的依赖库管理,以应对不断增长的依赖库数量和复杂性。更加开放、共享和社交化的项目协作模式,以促进开源社区的发展和创新。更加注重企业应用和生产环境的支持,以适应企业级应用的需求和要求。的发布于 2023-04-19 11:21・IP 属地陕西项目管理Maven项目管理工具​赞同​​添加评论​分享​喜欢​收藏​申请

java中的maven是什么? - 知乎

java中的maven是什么? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册JavaJava 项目开发Mavenjava中的maven是什么?maven是什么?有什么作用,能解决什么问题?优点是什么?显示全部 ​关注者7被浏览11,978关注问题​写回答​邀请回答​好问题 1​添加评论​分享​4 个回答默认排序千锋教育​已认证账号​ 关注身为Java程序员,几乎每天都会跟他打交道——Maven。千锋教育2023新版Maven入门实战教程(视频教程+课程笔记)千锋教育2023新版Maven入门实战教程—maven笔记汇总一、Maven快速上手/回顾Maven是专门用于构建、管理Java项目的工具,它为我们提供了标准化的项目结构,如下:├─ProjectName // 项目名称

│ ├─src // 根目录

│ │ ├─main // 主目录

│ │ │ ├─java // Java源码目录

│ │ │ ├─resources //配置文件目录

│ │ │ └─webapp // Web文件目录

│ │ ├─test // 测试目录

│ │ │ ├─java // Java测试代码目录

│ │ │ └─resources // 测试资源目录

│ └─pom.xml // Maven项目核心配置文件同时也提供了一套标准的构建流程:从编译,到测试、打包、发布……,涵盖整个项目开发的全流程。并且最重要的一点,它还提供了依赖(Jar包)管理功能,回想大家最初学JavaEE时,想要用到一个外部的工具包,必须先从网上找到对应的Jar文件,接着将其手动丢到项目的lib目录下,当项目需要依赖的外部包达到几十个、每个外部包还依赖其他包时,这个过程无疑很痛苦。而这一切的一切,随着Maven的出现,从此不复存在。1.1、Maven安装指南使用Maven前,必须先安装它,这时可以先去到Maven官网下载自己所需的版本:下载进行解压后(不过解压的目录最好别带中文,否则后续会碰到一些问题),接着需要配置一下,总共分为四步。①在系统环境中,新建一个MAVEN_HOME或M2_HOME的环境变量,值写成解压路径。②找到Path变量并编辑,在其中新增一行,配置一下bin目录:%M2_HOME%\bin其实安装许多软件,都要配置这一步,到底是为啥呢?因为任何软件的bin目录,通常会存放一些可执行的脚本/工具,如JDK的bin目录中,就存放着javac、javap、jstack……一系列工具。如果不在Path中配置bin,那想要使用这些工具,只能去到JDK安装目录下的bin目录,然后才能使用。不过当大家在Path中配置了bin之后,这个配置就会对全局生效,任何位置执行javac这类指令,都可以从Path中,找到对应的bin目录位置,然后调用其中提供的工具。③找到Maven解压目录下的conf/settings.xml,然后点击编辑,找到标签,将其挪动到注释区域外,然后配置本地仓库位置:自己选择一个空的本地目录(最好别带中文)④由于Apache的官方镜像位于国外,平时拉取依赖比较慢,所以还需配置Maven国内的镜像源,这时在settings.xml文件中,先搜索标签,接着在其中配置阿里云的镜像地址:

alimaven

aliyun maven

http://maven.aliyun.com/nexus/content/groups/public/

central

到这里,整个Maven安装流程全部结束,最后也可以在终端工具,执行mvn -v命令检测一下。1.2、Maven入门指南安装好Maven后,接着可以通过IDEA工具来创建Maven项目,不过要记得配置一下本地Maven及仓库位置:在这里配置,是对全局生效,后续创建的所有Maven项目,都会使用这组配置。1.2.1、IDEA创建Maven项目接着就可以创建Maven项目,这个过程特别简单,先选择New Project:这里选创建Maven项目,接着指定一下JDK,还可以选择是否使用骨架,选好后直接Next下一步:这里需要写一下GAV坐标,稍微解释一下三个选项的含义:GroupID:组织ID,一般写公司的名称缩写;ArtifactID:当前Maven工程的项目名字;Version:当前Maven工程的版本。接着点下一步,然后选择一下项目的存储位置,最后点击Finish创建即可:这一步结束后,就得到了一个纯净版的Maven项目,然后可以基于Maven实现依赖管理。1.2.2、Maven依赖管理最简单的依赖管理,总共就只有三步,如下:①在pom.xml中,先写一个标签;②在标签中,使用标签来导入依赖;③在标签中,通过GAV坐标来导入依赖。如果你不知道一个依赖的GAV该怎么写,可以去仓库索引中搜索,现在写个坐标来感受一下:

org.springframework

spring-web

5.1.8.RELEASE

引入GAV坐标后,依赖不会立马生效,需要手动刷新一下项目:可以借助IDEA自带的Maven项目工具来进行刷新;也可以安装Maven-Helper插件,在项目上右键,然后通过Run Maven里的指令刷新。至此,大家就掌握了Maven的基本使用。PS:如果你本地仓库中有依赖,但忘了GAV坐标怎么写,通过IDEA工具,在pom.xml文件中按下alt+insert快捷键,接着点击Dependency,可以做到可视化快捷导入。1.2.3、依赖范围管理有时候,有些依赖我们并不希望一直有效,比如典型的JUnit测试包,对于这类jar包而言,最好只针对测试环境有效,而编译环境、运行环境中,因为用不到单元测试,所以有没有办法移除呢?这时可以通过标签来控制生效范围:例如:

org.springframework.boot

spring-boot-starter-test

2.1.8.RELEASE

test

该标签共有五种取值方式,每种取值对应着一种依赖范围,而不同的依赖范围,生效的环境(classpath)也并不同,如下表所示:依赖范围编译环境测试环境运行环境compile生效生效生效provided生效生效不生效system生效生效不生效runtime不生效生效生效test不生效生效不生效项目引入的所有依赖,如果不显式指定依赖范围,默认是compile,意味着所有环境下都生效,而一般的依赖包也无需更改,只有某些特殊的依赖,才需要手动配置一下。如:JUnit、spring-test这类包,只在测试环境使用,所以配成test;Tomcat内置servlet-api包,为了避免在运行环境冲突,应该配成provided;……同时,标签还可以通过自定义的方式来添加其他的scope范围,例如Maven插件中使用的scope值:

some.group

some-artifact

1.0

plugin

这里的plugin就是自定义的scope,表示该依赖只在Maven插件中生效。最后,标签还有一类特殊、但很常用的取值范围,即import,但这个放在后面去讲。1.3、Maven工作原理剖析在Maven中,节点会分为工程、仓库两大类,工程是“依赖使用者”,仓库是“依赖提供者”,关系如下:看着或许有点头大,要讲明白得先弄清里面三种仓库:中央仓库:就是前面配置的镜像源,里面拥有海量的公共jar包资源;远程仓库:也叫私服仓库,主要存储公司内部的jar包资源,这个后续会细说;本地仓库:自己电脑本地的仓库,会在磁盘上存储jar包资源。大致了解三种仓库的含义后,接着来梳理Maven的工作流程:①项目通过GAV坐标引入依赖,首先会去本地仓库查找jar包;②如果在本地仓库中找到了,直接把依赖载入到当前工程的External Libraries中;③如果没找到,则去读取settings.xml文件,判断是否存在私服配置;④如果有私服配置,根据配置的地址找到远程仓库,接着拉取依赖到本地仓库;⑤如果远程仓库中没有依赖,根据私服配置去中央仓库拉取,然后放到私服、本地仓库;⑥从远程或中央仓库中,把依赖下载到本地后,再重复第二步,把依赖载入到项目中。上述六步便是Maven的完整工作流程,可能许多人没接触过私服,这个会放到后面聊。如果你的项目没配置Maven私服,那么第三步时,会直接从settings.xml读取镜像源配置,直接去到中央仓库拉取依赖。不过这里有个问题,拉取/引入依赖时,Maven是怎么知道要找谁呢?答案是依靠GAV坐标,大家可以去观察一下本地仓库,当你引入一个依赖后,本地仓库中的目录,会跟你的GAV坐标一一对应,如:无论是什么类型的仓库,都会遵循这个原则进行构建,所以,只要你书写了正确的GAV坐标,就一定能够找到所需的依赖,并将其载入到项目中。1.4、Maven生命周期通过IDEA工具的辅助,能很轻易看见Maven的九种Lifecycle命令,如下:双击其中任何一个,都会执行相应的Maven构建动作,为啥IDEA能实现这个功能呢?道理很简单,因为IDEA封装了Maven提供的命令,如:点击图中的clean,本质是在当前目录中,执行了mvn clean命令,下面解释一下每个命令的作用:clean:清除当前工程编译后生成的文件(即删除target整个目录);validate:对工程进行基础验证,如工程结构、pom、资源文件等是否正确;compile:对src/main/java目录下的源码进行编译(会生成target目录);test:编译并执行src/test/java/目录下的所有测试用例;package:将当前项目打包,普通项目打jar包,webapp项目打war包;verify:验证工程所有代码、配置进行是否正确,如类中代码的语法检测等;install:将当前工程打包,然后安装到本地仓库,别人可通过GAV导入;site:生成项目的概述、源码测试覆盖率、开发者列表等站点文档(需要额外配置);deploy:将当前工程对应的包,上传到远程仓库,提供给他人使用(私服会用)。上述便是九个周期阶段命令的释义,而Maven总共划分了三套生命周期:主要看default这套,该生命周期涵盖了构建过程中的检测、编译、测试、打包、验证、安装、部署每个阶段。注意一点:同一生命周期内,执行后面的命令,前面的所有命令会自动执行!比如现在执行一条命令:mvn testtest命令位于default这个生命周期内,所以它会先执行validate、compile这两个阶段,然后才会真正执行test阶段。同时,还可以一起执行多个命令,如:mvn clean install这两个命令隶属于不同的周期,所以会这样执行:先执行clean周期里的pre-clean、clean,再执行default周期中,validate~install这个闭区间内的所有阶段。从上面不难发现,default是Maven的核心周期,但其实上面并没有给完整,因为官方定义的default一共包含23个小阶段,上面的图只列出了七个核心周期,对详细阶段感兴趣的可以自行了解。Maven中只定义了三套生命周期,以及每套周期会包含哪些阶段,而每个阶段具体执行的操作,这会交给插件去干,也就是说:Maven插件会实现生命周期中的每个阶段,这也是大家为什么看到IDEA的Lifecycle下面,还会有个Plugins的原因:当你双击Lifecycle中的某个生命周期阶段,实际会调用Plugins中对应的插件。在Shell窗口执行mvn命令时,亦是如此,因为插件对应的实现包,都会以jar包形式存储在本地仓库里。你有特殊的需求,也可以在pom.xml的标签中,依靠插件来导入。二、Maven进阶操作上面所说到的一些知识,仅仅只是Maven的基本操作,而它作为Java项目管理占有率最高的工具,还提供了一系列高阶功能,例如属性管理、多模块开发、聚合工程等,不过这里先来说说依赖冲突。2.1、依赖冲突依赖冲突是指:在Maven项目中,当多个依赖包,引入了同一份类库的不同版本时,可能会导致编译错误或运行时异常。这种情况下,想要解决依赖冲突,可以靠升级/降级某些依赖项的版本,从而让不同依赖引入的同一类库,保持一致的版本号。另外,还可以通过隐藏依赖、或者排除特定的依赖项来解决问题。但是想搞明白这些,首先得理解Maven中的依赖传递性,一起来看看。2.1.1、依赖的传递性先来看个例子:目前的工程中,仅导入了一个spring-web依赖,可是从下面的依赖树来看,web还间接依赖于beans、core包,而core包又依赖于jcl包,此时就出现了依赖传递,所谓的依赖传递是指:当引入的一个包,如果依赖于其他包(类库),当前的工程就必须再把其他包引入进来。这相当于无限套娃,而这类“套娃”引入的包,被称为间接性依赖。与之对应的是直接性依赖,即:当前工程的pom.xml中,直接通过GAV坐标引入的包。既然如此,那么一个工程内的依赖包,就必然会出现层级,如:在这里我们仅引入了一个boot-test坐标,但当打开依赖树时,会发现这一个包,依赖于其他许多包,而它所依赖的包又依赖于其他包……,如此不断套娃,最深套到了五层。而不同的包,根据自己所处的层级不同,会被划分为1、2、3、4……级。2.1.2、自动解决冲突问题Maven作为Apache旗下的产品,而且还经过这么多个版本迭代,对于依赖冲突问题,难道官方想不到吗?必然想到了,所以在绝对大多数情况下,依赖冲突问题并不需要我们考虑,Maven工具会自动解决,怎么解决的呢?就是基于前面所说的依赖层级,下面来详细说说。①层级优先原则,Maven会根据依赖树的层级,来自动剔除相同的包,层级越浅,优先级越高。这是啥意思呢?同样来看个例子:我们又通过GAV坐标导入了spring-web包,根据前面所说,web依赖于beans、core包,而beans包又依赖于core包,此时注意,这里出现了两个core包,前者的层级为2,后者的层级为3,所以Maven会自动将后者剔除,这点从图中也可明显看出,层级为3的core直接变灰了。②声明优先原则,上条原则是基于层级深度,来自动剔除冲突的依赖,那假设同级出现两个相同的依赖怎么办?来看例子:此时用GAV引入了web、jdbc两个包,来看右边的依赖树,web依赖于beans、core包,jdbc也依赖于这两个包,此时相同层级出现了依赖冲突,可从结果上来看,后面jdbc所依赖的两个包被剔除了,能明显看到一句:omitted for duplicate,这又是为啥呢?因为根据声明优先原则,同层级出现包冲突时,先声明的会覆盖后声明的,为此后者会被剔除。③配置优先原则,此时问题又又来了,既然相同层级出现同版本的类库,前面的会覆盖后面的,可是当相同层级,出现不同版本的包呢?依旧来看例子:此时pom引入了两个web包,前者版本为5.1.8,后者为5.1.2,这两个包的层级都是1,可是看右边的依赖树,此时会发现,5.1.8压根没引进来啊!为啥?这就是配置优先原则,同级出现不同版本的相同类库时,后配置的会覆盖先配置的。所以大家发现了嘛?在很多时候,并不需要我们考虑依赖冲突问题,Maven会依据上述三条原则,帮我们智能化自动剔除冲突的依赖,其他包都会共享留下来的类库,只有当出现无法解决的冲突时,这才需要咱们手动介入。通常来说,Maven如果无法自动解决冲突问题,会在构建过程中抛出异常并提供相关信息,这时大家可以根据给出的信息,手动排除指定依赖。2.1.3、主动排除依赖所谓的排除依赖,即是指从一个依赖包中,排除掉它依赖的其他包,如果出现了Maven无法自动解决的冲突,就可以基于这种手段进行处理,例如:

org.springframework

spring-web

5.1.8.RELEASE

org.springframework

spring-beans

从图中结果可以明显看出,通过这种方式,可以手动移除包所依赖的其他包。当出现冲突时,通过这种方式将冲突的两个包,移除掉其中一个即可。其实还有种叫做“隐藏依赖”的手段,不过这种手段是用于多工程聚合项目,所以先讲清楚“多模块/工程”项目,接着再讲“隐藏依赖”。2.2、Maven分模块开发现如今,一个稍具规模的完整项目,通常都要考虑接入多端,如PC、WEB、APP端等,那此时问题来了,每个端之间的逻辑,多少会存在细微差异,如果将所有代码融入在一个Maven工程里,这无疑会显得十分臃肿!为了解决这个问题,Maven推出了分模块开发技术。所谓的分模块开发,即是指创建多个Maven工程,组成一个完整项目。通常会先按某个维度划分出多个模块,接着为每个模块创建一个Maven工程,典型的拆分维度有三个:①接入维度:按不同的接入端,将项目划分为多个模块,如APP、WEB、小程序等;②业务维度:根据业务性质,将项目划分为一个个业务模块,如前台、后台、用户等;③功能维度:共用代码做成基础模块,业务做成一个模块、API做成一个模块……。当然,通常①、②会和③混合起来用,比如典型的“先根据代码功能拆分,再根据业务维度拆分”。相较于把所有代码揉在一起的“大锅饭”,多模块开发的好处特别明显:①简化项目管理,拆成多个模块/子系统后,每个模块可以独立编译、打包、发布等;②提高代码复用性,不同模块间可以相互引用,可以建立公共模块,减少代码冗余度;③方便团队协作,多人各司其职,负责不同的模块,Git管理时也能减少交叉冲突;④构建管理度更高,更方便做持续集成,可以根据需要灵活配置整个项目的构建流程;……不过Maven2.0.9才开始支持聚合工程,在最初的时期里,想要实现分模块开发,需要手动先建立一个空的Java项目(Empty Project):接着再在其中建立多个Maven Project:然后再通过mvn install命令,将不同的Maven项目安装到本地仓库,其他工程才能通过GAV坐标引入。这种传统方式特别吃力,尤其是多人开发时,另一个模块的代码更新了,必须手动去更新本地仓库的jar包;而且多个模块之间相互依赖时,构建起来额外的麻烦!正因如此,官方在后面推出了“聚合工程”,下面聊聊这个。2.3、Maven聚合工程所谓的聚合工程,即是指:一个项目允许创建多个子模块,多个子模块组成一个整体,可以统一进行项目的构建。不过想要弄明白聚合工程,得先清楚“父子工程”的概念:父工程:不具备任何代码、仅有pom.xml的空项目,用来定义公共依赖、插件和配置;子工程:编写具体代码的子项目,可以继承父工程的配置、依赖项,还可以独立拓展。而Maven聚合工程,就是基于父子工程结构,来将一个完整项目,划分出不同的层次,这种方式可以很好的管理多模块之间的依赖关系,以及构建顺序,大大提高了开发效率、维护性。并且当一个子工程更新时,聚合工程可以保障同步更新其他存在关联的子工程!2.3.1、聚合工程入门指南理解聚合工程是个什么东东之后,接着来聊聊如何创建聚合工程,首先要创建一个空的Maven项目,作为父工程,这时可以在IDEA创建Maven项目时,把打包方式选成POM,也可以创建一个普通的Maven项目,然后把src目录删掉,再修改一下pom.xml: pom这样就得到了一个父工程,接着可以在此基础上,继续创建子工程:当点击Next后,大家会发现:这时无法手动指定G、V了,而是会从父工程中继承,最终效果如下:这里我创建了两个子工程,所以父工程的pom.xml中,会用一个标签,来记录自己名下的子工程列表,而子工程的pom头,也多了一个标签包裹!大家看这个标签有没有眼熟感?大家可以去看一下SpringBoot项目,每个pom.xml文件的头,都是这样的。这里提个问题:子工程下面能不能继续创建子工程?答案Yes,你可以无限套娃下去,不过我的建议是:一个聚合项目,最多只能有三层,路径太深反而会出现稀奇古怪的问题。2.3.2、聚合工程的依赖管理前面搭建好了聚合工程,接着来看个问题:zhuzi_001、002两个子工程中,各自引入了三个依赖,可观察上图会发现,两者引入的依赖仅有一个不同,其余全部一模一样!所以这时,就出现了“依赖冗余”问题,那有没有好的方式解决呢?答案是有的,前面说过:公共的依赖、配置、插件等,都可以配置在父工程里,如下:当把公共的依赖定义在父工程中,此时观察图中右侧的依赖树,会发现两个子工程都继承了父依赖。不过此时问题又来了!为了防止不同子工程引入不同版本的依赖,最好的做法是在父工程中,统一对依赖的版本进行控制,规定所有子工程都使用同一版本的依赖,怎么做到这点呢?可以使用标签来管理,例如:在父工程中,里只定义了一个webmvc依赖,而中定义了druid、test、jdbc三个依赖,这两个标签有何区别呢?:定义强制性依赖,写在该标签里的依赖项,子工程必须强制继承;:定义可选性依赖,该标签里的依赖项,子工程可选择使用。相信这样解释后,大家对于两个标签的区别,就能一清二楚了!同时注意,子工程在使用中已有的依赖项时,不需要写版本号,版本号在父工程中统一管理,这就满足了前面的需求。这样做的好处在于:以后为项目的技术栈升级版本时,不需要单独修改每个子工程的POM,只需要修改父POM文件即可,大大提高了维护性!2.3.3、聚合工程解决依赖冲突之前传统的Maven项目会存在依赖冲突问题,那聚合工程中存不存在呢?当然存在,比如001中引入了jdbc、test这两个包,而002中也引入了,这时假设把001工程打包到本地仓库,在002工程中引入时,此时依赖是不是又冲突了?Yes,怎么处理呢?先看例子:在上图中,001引入了aop包,接着通过install操作,把001工程打到了本地仓库。于是,在002工程中,引入了web、zhuzi_001这两个包。根据前面所说的依赖传递原则,002在引入001时,由于001引用了别的包,所以002被迫也引入了其他包。还是那句话,大多数情况下,Maven会基于那三条原则,自动帮你剔除重复的依赖,如上图右边的依赖树所示,Maven自动剔除了重复依赖。这种结果显然是好现象,可是万一Maven不能自动剔除怎么办?这时就需要用到最开始所说的“隐藏依赖”技术了!修改001的pom.xml,如下:

org.springframework

spring-aop

5.1.8.RELEASE

true

眼尖的小伙应该能发现,此时多了一个标签,该标签即是“隐藏依赖”的开关:true:开启隐藏,当前依赖不会向其他工程传递,只保留给自己用;false:默认值,表示当前依赖会保持传递性,其他引入当前工程的项目会间接依赖。此时重新把001打到本地仓库,再来看看依赖树关系:当开启隐藏后,其他工程引入当前工程时,就不会再间接引入当前工程的隐藏依赖,因此来手动排除聚合工程中的依赖冲突问题。其他许多资料里,讲这块时,多少讲的有点令人迷糊,而相信看到这里,大家就一定理解了Maven依赖管理。2.3.4、父工程的依赖传递来思考一个问题,现在项目需要用到Spring-Cloud-Alibaba的多个依赖项,如Nacos、Sentinel……等,根据前面所说的原则,由于这些依赖项可能会在多个子工程用到,最好的方式是定义在父POM的标签里,可是CloudAlibaba依赖这么多,一个个写未免太繁杂、冗余了吧?面对上述问题时,该如何处理呢?如下:

com.alibaba.cloud

spring-cloud-alibaba-dependencies

${spring-cloud-alibaba.version}

pom

import

标签取值为import的方式,通常会用在聚合工程的父工程中,不过必须配合pom使用,这是啥意思呢?这代表着:把spring-cloud-alibaba-dependencies的所有子依赖,作为当前项目的可选依赖向下传递。而当前父工程下的所有子工程,在继承父POM时,也会将这些可选依赖继承过来,这时就可以直接选择使用某些依赖项啦,如:

com.alibaba.cloud

spring-cloud-starter-alibaba-sentinel

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-config

2.3.5、聚合工程的构建前面说到过,Maven聚合工程可以对所有子工程进行统一构建,这是啥意思呢?如果是传统的分模块项目,需要挨个进行打包、测试、安装……等工作,而聚合工程则不同,来看IDEA提供的Maven辅助工具:尾巴上带有root标识的工程,意味着这是一个父工程,在我们的案例中,有一个父、两个子,来看IDEA的工具,除开给两个子工程提供了Lifecycle命令外,还给父工程提供了一套Lifecycle命令,这两者的区别在哪儿呢?当你双击父工程的某个Lifecycle命令,它找到父POM的标签,再根据其中的子工程列表,完成对整个聚合工程的构建工作。大家可以去试一下,当你双击父工程Lifecycle下的clean,它会把你所有子工程的target目录删除。同理,执行其他命令时也一样,比如install命令,双击后它会把你所有的子工程,打包并安装到本地仓库,不过问题又又又来了!假设这里001引用了002,002又引用了001,两者相互引用,Maven会如何构建啊?到底该先打包001,还是该先打包002?我没去看过Lifecycle插件的源码,不过相信背后的逻辑,应该跟Spring解决依赖循环类似,感兴趣的小伙伴可以自行去研究。不过我这里声明一点:Maven聚合工程的构建流程,跟标签里的书写顺序无关,它会自行去推断依赖关系,从而完成整个项目的构建。2.3.6、聚合打包跳过测试当大家要做项目发版时,就需要对整个聚合工程的每个工程打包(jar或war包),此时可以直接双击父工程里的package命令,但test命令在package之前,按照之前聊的生命周期原则,就会先执行test,再进行打包。test阶段,会去找到所有子工程的src/test/java目录,并执行里面的测试用例,如果其中任何一个报错,就无法完成打包工作。而且就算不报错,执行所有测试用例也会特别耗时,这时该怎么办呢?可以选择跳过test阶段,在IDEA工具里的操作如下:先选中test命令,接着点击上面的闪电图标,这时test就会画上横线,表示该阶段会跳过。如果你是在用mvn命令,那么打包跳过测试的命令如下:mvn package –D skipTests同时大家还可以在pom.xml里,配置插件来精准控制,比如跳过某个测试类不执行,配置规则如下:

maven-surefire-plugin

2.22.1

true

**/XXX*Test.java

**/XXX*Test.java

不过这个功能有点鸡肋,了解即可,通常不需要用到。2.4、Maven属性回到之前案例的父工程POM中,此时来思考一个问题:虽然我们通过标签,来控制了子工程中的依赖版本,可目前还有一个小问题:版本冗余!比如现在我想把Spring版本从5.1.8升级到5.2.0,虽然不需要去修改子工程的POM文件,可从上图中大家会发现,想升级Spring的版本,还需要修改多处地方!咋办?总不能只升级其中一个依赖的版本吧?可如果全部都改一遍,无疑就太累了……,所以,这里我们可以通过Maven属性来做管理,我们可以在POM的标签中,自定义属性,如:

5.2.0.RELEASE

而在POM的其他位置中,可以通过${}来引用该属性,例如:这样做的好处特别明显,现在我想升级Spring版本,只需要修改一处地方即可!除开可以自定义属性外,Maven也会有很多内置属性,大体可分为四类:类型使用方式Maven内置属性${属性名},如${version}项目环境属性${setting.属性名},如${settings.localRepository}Java环境变量${xxx.属性名},如${java.class.path}系统环境变量${env.属性名},如${env.USERNAME}不过这些用的也不多,同时不需要记,要用的时候,IDEA工具会有提示:2.5、Maven多环境配置实际工作会分为开发、测试、生产等环境,不同环境的配置信息也略有不同,而大家都知道,我们可以通过spring.profiles.active属性,来动态使用不同环境的配置,而Maven为何又整出一个多环境配置出来呢?想要搞清楚,得先搭建一个SpringBoot版的Maven聚合工程。首先创建一个只有POM的父工程,但要注意,这里是SpringBoot版聚合项目,需稍微改造:

org.springframework.boot

spring-boot-starter-parent

2.1.5.RELEASE

4.0.0

com.zhuzi

maven_zhuzi

1.0-SNAPSHOT

pom

8

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-maven-plugin

对比普通聚合工程的父POM来说,SpringBoot版的聚合工程,需要先把spring-boot-starter声明成自己的“爹”,同时需要引入SpringBoot相关的插件,并且我在这里还引入了一个boot-web依赖。接着来创建子工程,在创建时记得选SpringBoot模板来创建,不过创建后记得改造POM:

maven_zhuzi

com.zhuzi

1.0-SNAPSHOT

4.0.0

boot_zhuzi_001

boot_zhuzi_001

Demo project for Spring Boot就只需要这么多,因为SpringBoot的插件、依赖包,在父工程中已经声明了,这里会继承过来。接着来做Maven多环境配置,找到父工程的POM进行修改,如下:

dev

dev

prod

prod

true

test

test

配置完这个后,刷新当前Maven工程,IDEA中就会出现这个:默认停留在prod上,这是因为POM中用标签指定了,接着去到子工程的application.yml中,完成Spring的多环境配置,如下:# 设置启用的环境

spring:

profiles:

active: ${profile.active}

---

# 开发环境

spring:

profiles: dev

server:

port: 80

---

# 生产环境

spring:

profiles: prod

server:

port: 81

---

# 测试环境

spring:

profiles: test

server:

port: 82

---这里可以通过文件来区分不同环境的配置信息,但我这里为了简单,就直接用---进行区分,这组配置大家应该很熟悉,也就是不同的环境中,使用不同的端口号,但唯一不同的是:以前spring.profiles.active属性会写上固定的值,而现在写的是${profile.active},这是为什么呢?这代表从pom.xml中,读取profile.active属性值的意思,而父POM中配了三组值:dev、prod、test,所以当前子工程的POM,也会继承这组配置,而目前默认勾选在prod上,所以最终spring.profiles.active=prod,不过想要在application.yml读到pom.xml的值,还需在父POM中,加一个依赖和插件:

org.springframework.boot

spring-boot-configuration-processor

2.1.5.RELEASE

true

org.apache.maven.plugins

maven-resources-plugin

3.2.0

UTF-8

true

最后来尝试启动子工程,操作流程如下:①在Maven工具的Profiles中勾选dev,并刷新当前项目;②接着找到子工程的启动类,并右键选择Run ……启动子项目。先仔细看执行的结果,我来解释一下执行流程:①启动时,pom.xml根据勾选的Profiles,使用相应的dev环境配置;②yml中${profile.active}会读到profile.active=dev,使用dev配置组;③application.yml中的dev配置组,server.port=80,所以最终通过80端口启动。看完这个流程,大家明白最开始那个问题了吗?Maven为何还整了一个多环境配置?大家可能有种似懂非懂的感觉,这里来说明一下,先把环境换到微服务项目中,假设有20个微服务,此时项目要上线或测试,所以需要更改配置信息,比如把数据库地址换成测试、线上地址等,而不同环境的配置,相信大家一定用application-dev.yml、application-prod.yml……做好了区分。但就算提前准备了不同环境的配置,可到了切换环境时,还需要挨个服务修改spring.profiles.active这个值,从dev改成prod、test,然后才能使用对应的配置进行打包,可这里有20个微服务啊,难道要手动改20次吗?而在父POM中配置了Maven多环境后,这时yml会读取pom.xml中的值,来使用不同的配置文件,此时大家就只需要在IDEA工具的Profiles中,把钩子从dev换到test、prod,然后刷新一下Maven,SpringBoot就能动态的切换配置文件,这是不是妙极了?因此,这才是Maven多环境的正确使用姿势!三、Maven私服搭建前面叨叨絮絮说了一大堆,最后就来聊聊Maven私服配置,为啥需要私服呢?大家来设想这么个场景,假设你身在基建团队,主要负责研发各个业务开发组的公用组件,那么当你写完一个组件后,为了能让别的业务开发组用上,难道是先把代码打包,接着用U盘拷出来,给别人送过去嘛?有人说不至于,难道我不会直接发过去啊……的确,用通讯软件发过去也行,但问题依旧在,假设你的组件升级了,又发一遍吗?所以,为了便于团队协作,搭建一个远程仓库很有必要,写完公用代码后,直接发布到远程仓库,别人需要用到时,直接从远程仓库拉取即可,而你升级组件后,只需要再发布一个新版本即可!那远程仓库该怎么搭建呀?这就得用到Maven私服技术,最常用的就是基于Nexus来搭建。3.1、Nexus私服搭建指南Nexus是Sonatype公司开源的一款私服产品,大家可以先去到Nexus官网下载一下安装包,Nexus同样是一款解压即用的工具,不过也要注意:解压的目录中不能存在中文,否则后面启动不起来!解压完成后,会看到两个目录:nexus-x.x.x-xx:里面会放Nexus启动时所需要的依赖、环境配置;sonatype-work:存放Nexus运行时的工作数据,如存储上传的jar包等。接着可以去到:解压目录/etc/nexus-default.properties这个文件修改默认配置,默认端口号是8081,如果你这个端口已被使用,就可以修改一下,否则通常不需要更改。接着可以去到解压目录的bin文件夹中,打开cmd终端,执行启动命令:nexus.exe /run nexus初次启动的过程会额外的慢,因为它需要初始化环境,创建工作空间、内嵌数据库等,直到看见这句提示:此时才算启动成功,Nexus初次启动后,会在sonatype-work目录中生成一个/nexus3/admin.password文件,这里面存放着你的初始密码,默认账号就是admin,在浏览器输入:http://localhost:8081访问Nexus界面,接着可以在网页上通过初始密码登录,登录后就会让你修改密码,改完后就代表Nexus搭建成功(不过要记住,改完密码记得重新登录一次,否则后面的操作会没有权限)。3.2、Nexus私服仓库登录成功后,点击Browse会看到一些默认仓库,这里稍微解释一下每个字段的含义。Name:仓库的名字;Type:仓库的类型;Format:仓库的格式;Status:仓库的状态;URL:仓库的网络地址。重点来说说仓库的分类,总共有四种类型:类型释义作用hosted宿主仓库保存中央仓库中没有的资源,如自研组件proxy代理仓库配置中央仓库,即镜像源,私服中没有时会去这个地址拉取group仓库组用来对宿主、代理仓库分组,将多个仓库组合成一个对外服务virtual虚拟仓库并非真实存在的仓库,类似于MySQL中的视图仓库的关系如下:本地的Maven需要配置私服地址,当项目需要的依赖,在本地仓库没有时,就会去到相应的宿主/远程仓库拉取;如果宿主仓库也没有,就会根据配置的代理仓库地址,去到中央仓库拉取,最后依次返回……。3.3、Maven配置私服Maven想要使用私服,需要先修改settings.xml文件,我的建议是别直接改,先拷贝一份出来,接着来讲讲配置步骤。①修改settings.xml里的镜像源配置,之前配的阿里云镜像不能用了,改成:

nexus-zhuzi

*

http://localhost:8081/repository/maven-public/

②在私服中修改访问权限,允许匿名用户访问,如下:③在Nexus私服中配置一下代理仓库地址,即配置镜像源:将这个默认的中央仓库地址,改为国内的阿里云镜像:http://maven.aliyun.com/nexus/content/groups/public/改完后记得拖动到最下方,点击Save保存一下即可。④在Maven的settings.xml中,配置私服的账号密码:

zhuzi-release

admin

你的私服账号密码

zhuzi-snapshot

admin

你的私服账号密码

这两组配置,放到标签中的任何一处即可,这里可以先这样配置,看不懂没关系。3.4、项目配置私服前面配置好了本地Maven与私服的映射关系,接着要配置项目和私服的连接,说下流程。①为项目创建对应的私服仓库,如果已有仓库,可以直接复用,创建步骤如下:其中唯一值得一提的就是仓库格式,这里有三个可选项:Release:稳定版,表示存放可以稳定使用的版本仓库;Snapshot:快照版,代表存储开发阶段的版本仓库;Mixed:混合版,不区分格式,表示混合存储代码的仓库。为了规范性,我的建议是Release、Snapshot格式的仓库,各自都创建一个。②在Maven工程的pom.xml文件中,配置对应的私服仓库地址,如下:

zhuzi-release

http://localhost:8081/repository/zhuzi-release/

zhuzi-snapshot

http://localhost:8081/repository/zhuzi-snapshot/

③将当前项目发布到私服仓库,这里可以执行mvn clean deploy命令,也可以通过IDEA工具完成:不过这里有一个细节要注意,由于配置了私服上的两个宿主仓库,一个为稳定仓库,另一个为快照仓库,所以发布时,默认会根据当前项目的版本结尾,来选择上传到相应的仓库,例如上图中的结尾是SNAPSHOT,所以会被发布到快照仓库,如果结尾不是这个后缀时,就会被发布到Release仓库。当发布完成后,大家就可以登录Nexus界面,找到对应的宿主仓库,查看相应的jar包信息啦!不过还有一点要注意:你要发布的包不能带有上级,即不能有parent依赖,否则在其他人在拉取该项目时,会找不到其父项目而构建失败。要解决这个问题,可以先将parent项目打包并上传至远程仓库,然后再发布依赖于该parent项目的子模块。3.5、Nexus配置仓库组前面在说仓库类型时,还提到过一个“仓库组”的概念,如果你目前所处的公司,是一个大型企业,不同团队都有着各自的宿主仓库,而你恰恰又需要用到其他团队的组件,这时难道需要在pom.xml中,将远程仓库地址先改为其他团队的地址吗?答案是不需要的,这时可以创建一个仓库组。大家可以看到,图中的Members区域代表当前仓库组的成员,而这些成员会按照你排列的顺序,具备不同的优先级,越靠前的优先级越高。创建好仓库组后,接着可以去配置一下仓库组,这里有两种方式。3.5.1、配置单个工程与仓库组的映射这种方式只需修改pom.xml即可:

zhuzi-group

http://localhost:8081/repository/zhuzi-group/

true

true

plugin-group

http://localhost:8081/repository/zhuzi-group/

true

true

在上述这组配置中,配置了两个标签,分别是啥意思呢?很简单,第一个是普通依赖的仓库组地址,第二个是插件依赖的仓库组地址,前者针对于pom.xml中的标签生效,后者针对标签生效。当你通过GAV坐标,引入一个依赖时,如果本地仓库中没找到,则会根据配置的仓库组地址,去到Nexus私服上拉取依赖。不过因为仓库组是由多个仓库组成的,所以拉取时,会根据仓库的优先级,依次搜索相应的依赖,第一个仓库将是最优先搜索的仓库。3.5.2、配置本地Maven与仓库组的映射上一种配置方式,只针对于单个Maven工程生效,如果你所有的Maven工程,都需要与Nexus私服上的仓库组绑定,这时就可以直接修改settings.xml文件,如下:

zhuzi-group

nexus-maven

http://localhost:8081/repository/zhuzi-group/

true

always

true

always

nexus-maven

http://localhost:8081/repository/zhuzi-group/

true

always

true

always

这组配置要写在标签里面,其他的与前一种方式没太大区别,唯一不同的是多了一个标签,该标签的作用是指定仓库镜像的更新策略,可选项如下:always:每次需要Maven依赖时,都先尝试从远程仓库下载最新的依赖项;daily:每天首次使用某个依赖时,从远程仓库中下载一次依赖项;interval:X:每隔X个小时,下载一次远程仓库的依赖,X只能是整数;never:仅使用本地仓库中已经存在的依赖项,不尝试从远程仓库中拉取。Maven工程使用依赖时,首先会从本地仓库中查找所需的依赖项,如果本地仓库没有,则从配置的远程仓库下载这时会根据策略来决定是否需要从远程仓库下载依赖。不过上述这样配置后,还无法让配置生效,如果想要生效,还得激活一下上述配置:

zhuzi-group

不过要记住,无论两种方式内的哪一种,都只允许从私服上拉取依赖,如果你的某个工程,想要打包发布到私服上,还是需要配置3.4阶段的标签。四、Maven总结最后,对于Maven项目的命名,不同单词最好用-减号分割,而不是_下划线,毕竟Spring、Apache……的开源项目,都采用这种命名方式。不过,如果你要问我:“你为啥用_不用-啊”?别问,问就是我控几不住我寄几啊……,更何况有句话说的好:知错不改,善莫大焉!来源:竹子爱熊猫到这里,对于Maven常用的功能已经讲完了,掌握这些知识后,玩转Maven的难度应该不大。如果你对资源感兴趣可私信或者留言哦~发布于 2023-08-20 12:55​赞同 2​​1 条评论​分享​收藏​喜欢收起​叫我阿柒啊​ 关注maven说白了就是帮你解决项目依赖的一个工具。假如你程序依赖了一个Test.jar,你在普通的java程序中需要下载这个jar,然后你要将这个jar添加到项目中。另一个程序也依赖Test.jar,你还要再添加到这个程序中。如果你上次碰巧删了Test.jar,你还要重新下载一遍。如果使用maven,你配置一个远程仓库和本地仓库,maven项目中有一个pom.xml文件,假如你依赖了Test.jar,你就在pom文件中通过配置引入Test.jar,如果你的本地仓库没有Test.jar,就从远程仓库下载到本地仓库。别的项目再依赖Test.jar,通过pom配置依赖,就直接使用了本地仓库的jar包。除此之外,maven还有的一些插件具有将自定义类和依赖放入同一个jar包功能,也可以将所有依赖放到指定目录中。也可以只编译指定的类。在开发过程中,通过maven,项目在不同的机器上的依赖解析变得更容易,通过pom文件就知道依赖了哪些jar,可以一键下载。普通java项目的依赖只能一个一个的下载添加,贼麻烦。eclipse配合maven不咋地,IDEA配合maven天下无敌。纯手敲,希望对你有帮助!!!!发布于 2020-08-05 23:10​赞同 10​​1 条评论​分享​收藏​喜欢收起​​

Maven介绍 - 廖雪峰的官方网站

Maven介绍 - 廖雪峰的官方网站

Index

廖雪峰的官方网站

Blog

Java教程

手写Spring

手写Tomcat

Makefile教程

Python教程

JavaScript教程

区块链教程

SQL教程

Git教程

文章

问答

More

Java教程

手写Spring

手写Tomcat

Makefile教程

Python教程

JavaScript教程

区块链教程

SQL教程

Git教程

文章

问答

Java教程

手写Spring

手写Tomcat

Makefile教程

Python教程

JavaScript教程

区块链教程

SQL教程

Git教程

文章

问答

 

Profile

Passkey

Sign Out

Sign In

English

简体中文

Index

Java教程

Java快速入门

Java简介

安装JDK

第一个Java程序

Java代码助手

使用IDE

使用IDE练习插件

Java程序基础

Java程序基本结构

变量和数据类型

整数运算

浮点数运算

布尔运算

字符和字符串

数组类型

流程控制

输入和输出

if判断

switch多重选择

while循环

do while循环

for循环

break和continue

数组操作

遍历数组

数组排序

多维数组

命令行参数

面向对象编程

面向对象基础

方法

构造方法

方法重载

继承

多态

抽象类

接口

静态字段和静态方法

作用域

内部类

classpath和jar

class版本

模块

Java核心类

字符串和编码

StringBuilder

StringJoiner

包装类型

JavaBean

枚举类

记录类

BigInteger

BigDecimal

常用工具类

异常处理

Java的异常

捕获异常

抛出异常

自定义异常

NullPointerException

使用断言

使用JDK Logging

使用Commons Logging

使用Log4j

使用SLF4J和Logback

反射

Class类

访问字段

调用方法

调用构造方法

获取继承关系

动态代理

注解

使用注解

定义注解

处理注解

泛型

什么是泛型

使用泛型

编写泛型

擦拭法

extends通配符

super通配符

泛型和反射

集合

Java集合简介

使用List

编写equals方法

使用Map

编写equals和hashCode

使用EnumMap

使用TreeMap

使用Properties

使用Set

使用Queue

使用PriorityQueue

使用Deque

使用Stack

使用Iterator

使用Collections

IO

File对象

InputStream

OutputStream

Filter模式

操作Zip

读取classpath资源

序列化

Reader

Writer

PrintStream和PrintWriter

使用Files

日期与时间

基本概念

Date和Calendar

LocalDateTime

ZonedDateTime

DateTimeFormatter

Instant

最佳实践

单元测试

编写JUnit测试

使用Fixture

异常测试

条件测试

参数化测试

正则表达式

正则表达式简介

匹配规则

复杂匹配规则

分组匹配

非贪婪匹配

搜索和替换

加密与安全

编码算法

哈希算法

BouncyCastle

Hmac算法

对称加密算法

口令加密算法

密钥交换算法

非对称加密算法

签名算法

数字证书

多线程

多线程基础

创建新线程

线程的状态

中断线程

守护线程

线程同步

同步方法

死锁

使用wait和notify

使用ReentrantLock

使用Condition

使用ReadWriteLock

使用StampedLock

使用Semaphore

使用Concurrent集合

使用Atomic

使用线程池

使用Future

使用CompletableFuture

使用ForkJoin

使用ThreadLocal

使用虚拟线程

Maven基础

Maven介绍

依赖管理

构建流程

使用插件

模块管理

使用mvnw

发布Artifact

网络编程

网络编程基础

TCP编程

UDP编程

发送Email

接收Email

HTTP编程

RMI远程调用

XML与JSON

XML简介

使用DOM

使用SAX

使用Jackson

使用JSON

JDBC编程

JDBC简介

JDBC查询

JDBC更新

JDBC事务

JDBC Batch

JDBC连接池

函数式编程

Lambda基础

方法引用

使用Stream

创建Stream

使用map

使用filter

使用reduce

输出集合

其他操作

设计模式

创建型模式

工厂方法

抽象工厂

生成器

原型

单例

结构型模式

适配器

桥接

组合

装饰器

外观

享元

代理

行为型模式

责任链

命令

解释器

迭代器

中介

备忘录

观察者

状态

策略

模板方法

访问者

Web开发

Web基础

Servlet入门

Servlet开发

Servlet进阶

重定向与转发

使用Session和Cookie

JSP开发

MVC开发

MVC高级开发

使用Filter

修改请求

修改响应

使用Listener

部署

Spring开发

IoC容器

IoC原理

装配Bean

使用Annotation配置

定制Bean

使用Resource

注入配置

使用条件装配

使用AOP

装配AOP

使用注解装配AOP

AOP避坑指南

访问数据库

使用JDBC

使用声明式事务

使用DAO

集成Hibernate

集成JPA

集成MyBatis

设计ORM

开发Web应用

使用Spring MVC

使用REST

集成Filter

使用Interceptor

处理CORS

国际化

异步处理

使用WebSocket

集成第三方组件

集成JavaMail

集成JMS

使用Scheduler

集成JMX

Spring Boot开发

第一个Spring Boot应用

使用开发者工具

打包Spring Boot应用

瘦身Spring Boot应用

使用Actuator

使用Profiles

使用Conditional

加载配置文件

禁用自动配置

添加Filter

集成第三方组件

集成Open API

访问Redis

集成Artemis

集成RabbitMQ

集成Kafka

Spring Cloud开发

项目架构设计

搭建项目框架

设计交易引擎

设计资产系统

设计订单系统

设计撮合引擎

设计清算系统

完成交易引擎

设计定序系统

设计API系统

设计行情系统

设计推送系统

编写UI

项目总结

关注公众号不定期领红包:

加入知识星球社群:

关注微博获取实时动态:

Maven介绍

Last updated: ...

/

Reads: 14705514

Edit

在了解Maven之前,我们先来看看一个Java项目需要的东西。首先,我们需要确定引入哪些依赖包。例如,如果我们需要用到commons logging,我们就必须把commons logging的jar包放入classpath。如果我们还需要log4j,就需要把log4j相关的jar包都放到classpath中。这些就是依赖包的管理。

其次,我们要确定项目的目录结构。例如,src目录存放Java源码,resources目录存放配置文件,bin目录存放编译生成的.class文件。

此外,我们还需要配置环境,例如JDK的版本,编译打包的流程,当前代码的版本号。

最后,除了使用Eclipse这样的IDE进行编译外,我们还必须能通过命令行工具进行编译,才能够让项目在一个独立的服务器上编译、测试、部署。

这些工作难度不大,但是非常琐碎且耗时。如果每一个项目都自己搞一套配置,肯定会一团糟。我们需要的是一个标准化的Java项目管理和构建工具。

Maven就是是专门为Java项目打造的管理和构建工具,它的主要功能有:

提供了一套标准化的项目结构;

提供了一套标准化的构建流程(编译,测试,打包,发布……);

提供了一套依赖管理机制。

Maven项目结构

一个使用Maven管理的普通的Java项目,它的目录结构默认如下:

a-maven-project

├── pom.xml

├── src

│   ├── main

│   │   ├── java

│   │   └── resources

│   └── test

│   ├── java

│   └── resources

└── target

项目的根目录a-maven-project是项目名,它有一个项目描述文件pom.xml,存放Java源码的目录是src/main/java,存放资源文件的目录是src/main/resources,存放测试源码的目录是src/test/java,存放测试资源的目录是src/test/resources,最后,所有编译、打包生成的文件都放在target目录里。这些就是一个Maven项目的标准目录结构。

所有的目录结构都是约定好的标准结构,我们千万不要随意修改目录结构。使用标准结构不需要做任何配置,Maven就可以正常使用。

我们再来看最关键的一个项目描述文件pom.xml,它的内容长得像下面:

4.0.0

com.itranswarp.learnjava

hello

1.0

jar

...

commons-logging

commons-logging

1.2

其中,groupId类似于Java的包名,通常是公司或组织名称,artifactId类似于Java的类名,通常是项目名称,再加上version,一个Maven工程就是由groupId,artifactId和version作为唯一标识。我们在引用其他第三方库的时候,也是通过这3个变量确定。例如,依赖commons-logging:

commons-logging

commons-logging

1.2

使用声明一个依赖后,Maven就会自动下载这个依赖包并把它放到classpath中。

安装Maven

要安装Maven,可以从Maven官网下载最新的Maven 3.8.x,然后在本地解压,设置几个环境变量:

M2_HOME=/path/to/maven-3.8.x

PATH=$PATH:$M2_HOME/bin

Windows可以把%M2_HOME%\bin添加到系统Path变量中。

然后,打开命令行窗口,输入mvn -version,应该看到Maven的版本信息:

┌────────────────────────────────────────────────────────┐

│Command Prompt - □ x │

├────────────────────────────────────────────────────────┤

│Microsoft Windows [Version 10.0.0] │

│(c) 2015 Microsoft Corporation. All rights reserved. │

│ │

│C:\> mvn -version │

│Apache Maven 3.8.x ... │

│Maven home: C:\Users\liaoxuefeng\maven │

│Java version: ... │

│... │

│C:\> _ │

│ │

│ │

└────────────────────────────────────────────────────────┘

如果提示命令未找到,说明系统PATH路径有误,需要修复后再运行。

小结

Maven是一个Java项目的管理和构建工具:

Maven使用pom.xml定义项目内容,并使用预设的目录结构;

在Maven中声明一个依赖项可以自动下载并导入classpath;

Maven使用groupId,artifactId和version唯一定位一个依赖。

Comments

Make a comment

Sign in to

make a comment

Index

Java教程

Java快速入门

Java简介

安装JDK

第一个Java程序

Java代码助手

使用IDE

使用IDE练习插件

Java程序基础

Java程序基本结构

变量和数据类型

整数运算

浮点数运算

布尔运算

字符和字符串

数组类型

流程控制

输入和输出

if判断

switch多重选择

while循环

do while循环

for循环

break和continue

数组操作

遍历数组

数组排序

多维数组

命令行参数

面向对象编程

面向对象基础

方法

构造方法

方法重载

继承

多态

抽象类

接口

静态字段和静态方法

作用域

内部类

classpath和jar

class版本

模块

Java核心类

字符串和编码

StringBuilder

StringJoiner

包装类型

JavaBean

枚举类

记录类

BigInteger

BigDecimal

常用工具类

异常处理

Java的异常

捕获异常

抛出异常

自定义异常

NullPointerException

使用断言

使用JDK Logging

使用Commons Logging

使用Log4j

使用SLF4J和Logback

反射

Class类

访问字段

调用方法

调用构造方法

获取继承关系

动态代理

注解

使用注解

定义注解

处理注解

泛型

什么是泛型

使用泛型

编写泛型

擦拭法

extends通配符

super通配符

泛型和反射

集合

Java集合简介

使用List

编写equals方法

使用Map

编写equals和hashCode

使用EnumMap

使用TreeMap

使用Properties

使用Set

使用Queue

使用PriorityQueue

使用Deque

使用Stack

使用Iterator

使用Collections

IO

File对象

InputStream

OutputStream

Filter模式

操作Zip

读取classpath资源

序列化

Reader

Writer

PrintStream和PrintWriter

使用Files

日期与时间

基本概念

Date和Calendar

LocalDateTime

ZonedDateTime

DateTimeFormatter

Instant

最佳实践

单元测试

编写JUnit测试

使用Fixture

异常测试

条件测试

参数化测试

正则表达式

正则表达式简介

匹配规则

复杂匹配规则

分组匹配

非贪婪匹配

搜索和替换

加密与安全

编码算法

哈希算法

BouncyCastle

Hmac算法

对称加密算法

口令加密算法

密钥交换算法

非对称加密算法

签名算法

数字证书

多线程

多线程基础

创建新线程

线程的状态

中断线程

守护线程

线程同步

同步方法

死锁

使用wait和notify

使用ReentrantLock

使用Condition

使用ReadWriteLock

使用StampedLock

使用Semaphore

使用Concurrent集合

使用Atomic

使用线程池

使用Future

使用CompletableFuture

使用ForkJoin

使用ThreadLocal

使用虚拟线程

Maven基础

Maven介绍

依赖管理

构建流程

使用插件

模块管理

使用mvnw

发布Artifact

网络编程

网络编程基础

TCP编程

UDP编程

发送Email

接收Email

HTTP编程

RMI远程调用

XML与JSON

XML简介

使用DOM

使用SAX

使用Jackson

使用JSON

JDBC编程

JDBC简介

JDBC查询

JDBC更新

JDBC事务

JDBC Batch

JDBC连接池

函数式编程

Lambda基础

方法引用

使用Stream

创建Stream

使用map

使用filter

使用reduce

输出集合

其他操作

设计模式

创建型模式

工厂方法

抽象工厂

生成器

原型

单例

结构型模式

适配器

桥接

组合

装饰器

外观

享元

代理

行为型模式

责任链

命令

解释器

迭代器

中介

备忘录

观察者

状态

策略

模板方法

访问者

Web开发

Web基础

Servlet入门

Servlet开发

Servlet进阶

重定向与转发

使用Session和Cookie

JSP开发

MVC开发

MVC高级开发

使用Filter

修改请求

修改响应

使用Listener

部署

Spring开发

IoC容器

IoC原理

装配Bean

使用Annotation配置

定制Bean

使用Resource

注入配置

使用条件装配

使用AOP

装配AOP

使用注解装配AOP

AOP避坑指南

访问数据库

使用JDBC

使用声明式事务

使用DAO

集成Hibernate

集成JPA

集成MyBatis

设计ORM

开发Web应用

使用Spring MVC

使用REST

集成Filter

使用Interceptor

处理CORS

国际化

异步处理

使用WebSocket

集成第三方组件

集成JavaMail

集成JMS

使用Scheduler

集成JMX

Spring Boot开发

第一个Spring Boot应用

使用开发者工具

打包Spring Boot应用

瘦身Spring Boot应用

使用Actuator

使用Profiles

使用Conditional

加载配置文件

禁用自动配置

添加Filter

集成第三方组件

集成Open API

访问Redis

集成Artemis

集成RabbitMQ

集成Kafka

Spring Cloud开发

项目架构设计

搭建项目框架

设计交易引擎

设计资产系统

设计订单系统

设计撮合引擎

设计清算系统

完成交易引擎

设计定序系统

设计API系统

设计行情系统

设计推送系统

编写UI

项目总结

廖雪峰的官方网站

©Copyright 2019-2021

Powered by iTranswarp

Feedback

License

Maven_百度百科

n_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心Maven播报讨论上传视频项目管理工具软件收藏查看我的收藏0有用+10Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。软件名称Maven软件平台JDK 8+ [3]最近更新时间2023年6月29日开发商The Apache Software Foundation [3]软件授权Apache License, version 2.0 [3]软件版本3.9.3 [3]软件大小8.8 MB目录1产生背景2主要功能3常用命令4安装配置5生命周期产生背景播报编辑Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata Turbine项目中用来简化构建过程。当时有一些项目(有各自Ant build文件),仅有细微的差别,而JAR文件都由CVS来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs。 [1]主要功能播报编辑Maven的主要目标是允许开发人员理解完整的 在最短的时间内完成开发工作。简化构建过程,提供统一的构建系统,提供高质量的项目信息,鼓励更好的发展做法。 [4]Maven 和 Ant 针对构建问题的两个不同方面。Ant 为 Java 技术开发项目提供跨平台构建任务。Maven 本身描述项目的高级方面,它从 Ant 借用了绝大多数构建任务。因此,由于 Maven 和 Ant代表两个差异很大的工具,所以接下来只说明这两个工具的等同组件之间的区别,如表 1 所示。 [1]说明MavenAnt标准构建文件project.xml 和 maven.xmlbuild.xml特性处理顺序${maven.home}/bin/driver.properties${project.home}/project.properties${project.home}/build.properties${user.home}/build.properties通过 -D 命令行选项定义的系统特性最后一个定义起决定作用。通过 -D 命令行选项定义的系统特性由 任务装入的特性第一个定义最先被处理。构建规则构建规则更为动态(类似于编程语言);它们是基于 Jelly 的可执行 XML。构建规则或多或少是静态的,除非使用