tokenpocket钱包网站首页|maven是干嘛的

作者: tokenpocket钱包网站首页
2024-03-17 08:22:18

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

408

除了中央仓库,还可以配置其他自定义的远程仓库,例如自己搭建的私有仓库或者第三方的远程仓库。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

1057

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:

谢谢分享~

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

线程池专题

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 教程 | 菜鸟教程

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

首页

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是干嘛的? - 知乎

maven是干嘛的? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册程序员编程信息技术(IT)JavaMavenmaven是干嘛的?关注者695被浏览1,291,565关注问题​写回答​邀请回答​好问题 8​1 条评论​分享​57 个回答默认排序wuxinliulei做好自己​ 关注项目构建,管理,jar包下载,现在发现了一个很有趣的功能,下载source并关联sourcemvn compile 下载jar 并编译项目mvn test 执行testmvn dependency:sources 尝试下载source文件mvn eclipse:eclipse 生成eclipse的工程配置文件---------------------------------------------------------------------------------------只有当你真正的将maven用起来的时候才会真正体会到maven的作用。来,跟我做:1)下载maven ,我们可以到maven的官网上去下,鉴于我以及一些英语差的人在第一步就被卡死了,贴上连接http://pan.baidu.com/s/1hry0DJe2)解压maven当我们下载好maven以后,进行解压3)设置环境变量,以使cmd执行程序命令的可以查找到该命令文件的位置具体设置环境变量的步骤自行百度 在path当中添加;%M2_HOME%\bin;4)测试是否成功配置好maven如果看到这个结果,说明你成功了。-----------------------------------------下面开始用maven干一些神奇的事情了---------------------------------------5)以前我们创建Java工程都是使用eclipse来创建,现在我们可以使用maven来进行创建了。(比如eclipse有个.classpath配置文件,当中就有lib包的路径,在我们用javac命令编译的时候也需要加上 -classpath 或者直接将用的jar包加入java安装目录的classpath当中让程序执行的时候能查找到,此时用maven这些都不用做了,maven可以帮我们做到)创建hello_maven文件夹 其中target是执行mvn compile之后生成的 当中有java类的编译结果class文件因为是初次操作,将会下载maven的一些默认包到本地来,比如我们的pom文件,没有添加任何依赖,在执行的时候仍然下载了一些默认包

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

zhihu.guowuxin.maven

maven-01

0.0.1-SNAPSHOT

默认包的路径,包括junit包和一些其他配置这个路径是可以改的在setting.xml当中

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

zhihu.guowuxin.maven

maven-01

0.0.1-SNAPSHOT

junit

junit

4.10

运行mvn test 就会自动下载包并进行测试package zhihu.guowuxin.maven;

import org.junit.*;

import static org.junit.Assert.*;

public class TestHelloMaven

{

@Test

public void testSayHello()

{

final HelloMaven hm = new HelloMaven();

final String str = hm.sayHello("maven");

assetEquals(str,"hello:maven");

}

}转载一篇答案http://suhuanzheng7784877.iteye.com/blog/1066917

1. 前言Maven是apache的一个顶级项目,它的出现越来越影响着现在的众多的开源项目,不仅如此,很多公司的很多新项目都采用Maven提倡的方式进行管理。Maven正逐渐侵入我们原先的管理项目的习惯,对于团队的管理,项目的构建,都是一种质的飞跃。当然是我个人的一些项目经验而说的这话。如果原先的团队老大本身的管理非常科学,也有一套其他软件辅助项目的构建、打包、发布等等一系列机制保证。那么Maven可能对其并没有实质性的影响或者是质的飞跃。当然在此也并不是说咱们中国人做出来的项目就管理不善……只是说利用Maven帮助我们构建项目更科学、更有可维护性、更加模块化、模块功能更加职能单一、做出来的项目更加具有可复用性等等好处。当然笔者也是个刚学习Maven的人,我们一起来学习Maven到底为我们带来了什么好处。笔者邮箱已经给出,欢迎与笔者进行学术上的交流。2. Maven的思想本来想看完了实战整本,再写总结的,后来觉得还是先写出来吧。哪怕有什么不对的地方再纠正都不晚,就怕到时候看完了一点心得都没有,全忘了就太……所以先将学习的点点滴滴感受写下来,之后结合实例咱们可以反复的推敲。目前笔者看到的Maven的主要功能是:项目构建;项目构建;项目依赖管理;软件项目持续集成;版本管理;项目的站点描述信息管理;由此可以看出Maven最主要的体现在了哪2个词?——对了,“项目”和“管理”!加在一起就是项目管理。项目管理是一个很抽象的概念。项目管理既可以指技术上的管理手段,也可以指“以人为本”的非技术因素。诚然,无论是技术还是非技术,项目的成败最大的责任人其实就是项目经理。这里我们抛开人为因素不提,仅就技术上来说,Maven提供了一种思想让团队更科学的管理、构建项目。用配置文件的方式对项目的描述、名称、版本号、项目依赖等等信息进行描述。使之项目描述结构清晰,任何人接手的成本比较低。在项目构建时,利用Maven的“约定大于配置”的思想,可以比Ant脚本构建项目省去不少配置文件的内容。而且一个项目可能依赖于其他的项目和第三方的组件才能顺利完成,Maven提供了仓库的概念,让这些依赖项放进仓库中,项目想要从仓库中去取,其他项目组也需要,OK,从仓库中去取,不必每个人去开源项目的站点去苦苦搜寻了。如此人员的成本、软件维护的成本、沟通的成本、硬件的成本都降下来了。客户笑了、公司老板也笑了、项目经理笑了、团队里面的人员也笑了、Apache社区看到这么多人在用也笑了。给笔者的感觉,现在的开源东西越来越向“敏捷开发”、“极限编程”的方向靠拢。通过Maven辅助管理项目,更能发现项目中哪些模块是重复的轮子。3. Maven的环境搭建下面我们来看看Maven的环境搭建。首先从Apache网站下载Maven。下载url是:http://maven.apache.org/download.html。笔者下载的是Maven 3.0.3版本。下载下来的包结构如下 bin就不用说了,就是Maven的一些命令参数,boot里面是Maven自己的类加载器,咱们也不必理会。conf里面有个settings.xml就是本机Maven的总配置信息。lib是Maven运行时需要的类库。将bin目录和JDK的bin目录一样设置为系统的PATH。这样在命令行就能直接运行Maven指令了。保持网络畅通,在命令行执行一条语句Java代码 mvn help:system 会从网上下载很多东西,本地用户的临时文件夹,会生成一个临时Maven文件目录,用于存储本地资源仓库。比如在C:\Users\liuyan下面有个文件夹叫做.m2将刚刚提到的settings.xml拷贝到C:\Users\liuyan\.m2下面,如此Maven就算在本机安装好了。开发工具的选用,笔者使用的是Myeclipse8.6版本,此IDE已经集成了Maven插件Maven4Myeclipse,仅需要将总配置信息配置上即可。在Myeclipse点击window菜单,打开preferences选项。之后点击到myeclipse的maven4myeclipse节点,如下图所示。4. Maven使用入门首先我们先写一个非常简单的小项目(我们姑且称之为项目啊),项目结构如下图所示src.main.java是项目代码文件夹、src.test.java是项目单元测试文件夹、src.main.resource是放置项目资源文件、配置文件文件夹。下面我们看项目代码一个简单的类com.liuyan.maven.helloword.HelloWorldJava代码 package com.liuyan.maven.helloword; public class HelloWorld { public String sayHello() { return "hello maven"; } /** * @param args */ public static void main(String[] args) { System.out.println(new HelloWorld().sayHello()); } } 在此项目的根目录下有一个pom.xml文件,内容如下Java代码 4.0.0 com.liuyan.maven MavenDemo 0.0.1-SNAPSHOT 进入控制台,将当前目录cd到与pom.xml同级的文件夹下面。执行命令Java代码 mvn clean compile 因为笔者写总结前之前下载了相关包,所以此时相关输出download包的信息少一些Java代码 [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building MavenDemo 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ MavenDemo --- [INFO] Deleting E:\Genuitec\ws\MavenDemo\target [INFO] [INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ MavenDem o --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e . build is platform dependent! [INFO] skip non existing resourceDirectory E:\Genuitec\ws\MavenDemo\src\main\res ources [INFO] [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ MavenDemo --- [WARNING] File encoding has not been set, using platform encoding GBK, i.e. buil d is platform dependent! [INFO] Compiling 1 source file to E:\Genuitec\ws\MavenDemo\target\classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.044s [INFO] Finished at: Sat May 28 16:23:07 CST 2011 [INFO] Final Memory: 5M/15M [INFO] ------------------------------------------------------------------------ 执行后造成的结果。就是项目的根路径下出现了一个taget文件夹 里面就是编译后的class类。经理过来说,你需要进行单元测试才能发布出来给大家用。Ok,我们在源码包——src/test/java下面开始编写junit单元测试类。单元测试代码如下Java代码 package com.liuyan.maven.helloword; import org.junit.Test; import org.junit.Assert; public class TestHelloWorld { @Test public void testSayHello() { HelloWorld helloWorld = new HelloWorld(); Assert.assertEquals(helloWorld.sayHello(), "hello maven"); } } 之后我们因为使用了junit单元测试,那么就是说我们这个项目依赖了它。修改一下pom.xml文件内容,如下Java代码 4.0.0 com.liuyan.maven MavenDemo 0.0.1-SNAPSHOT junit junit 4.7 test 进入命令行,执行命令Java代码 mvn clean test 执行后观察一下taget文件夹如下图,多出了test-classes文件夹和另外2个咱们暂时不用去管的文件夹。之后在观察一下本地的临时仓库C:\Users\liuyan\.m2\repository,会多出文件夹junit,下载的版本是4.7。如果我们想把项目打成jar的形式输出出去呢?在项目根目录下执行Java代码 mvn clean package 执行后效果如下 生成了一个jar包,至于SNAPSHOT是快照的意思,快照就是项目暂时还不稳定的意思。打包测试后没问题了,想把此项目当做Maven的本地资源仓库,为其他的项目也能提供服务,可以这么做。执行命令Java代码 mvn clean install 执行后本地的临时库文件多了你自己的这个项目。这样别的项目需要你这个项目提供服务的时候就可以从本地Mavne库中提取相应的jar了。5. 利用IDE构建POM.xml骨架现在的形式是这样,Maven虽然如火如荼,但是支持Maven的各种IDE插件确实还有很多不少的缺陷。正所谓名不正则言不顺,总给人感觉IDE不支持的开源项目都是“非主流”,呵呵,确实现在Maven在IDE中存在各种各样的问题,比如就刚才简单的命令在dos命令行就可以顺利执行,到了Myeclipse怎么就不行了呢。笔者在此仅仅使用IDE构建一下pom.xml文件,因为个人感觉利用IDE执行Maven命令其实意义不是很大,因为到了linux环境下还是需要手工执行Maven命令的。使用Myeclipse工具可以为开发者提供良好的可视化编辑POM.xml文件6. 总结这算是开张了,本次仅仅介绍了Maven的环境搭建和入门命令,还了解了一些Maven的思想。之后我们会结合书里面的小案例来一步步的学习Maven的特性。编辑于 2019-08-24 23:35​赞同 497​​17 条评论​分享​收藏​喜欢收起​哼哼唧唧大概率是多大概率?说三遍狗屁会不会变成真理?​ 关注浅薄一下:试图把软件开发过程中本该专人负责的事务性工作伪装成一门“技术”推给程序员,以便降低人工成本的一种工具。 :)编辑于 2014-10-13 11:38​赞同 50​​4 条评论​分享​收藏​喜欢

轻松理解maven是什么 - 知乎

轻松理解maven是什么 - 知乎切换模式写文章登录/注册轻松理解maven是什么老胡杂饲马农定义maven是基于项目对象模型(POM-project object model),可以通过一段描述来管理项目构建的软件项目管理工具。也就是说:maven可以帮我们优雅的引(抄)用前人实现过的jar包,以及构建自己项目的结构。说到引用,不得不提maven中两个非常重要的概念:仓库,坐标。举个例子,如果说他人的jar包是一个包裹,我们要用它,就得知道包裹在什么仓库的什么位置,知道之后把它拿过来拷贝一份放在自己的仓库里,岂不美哉。这里的仓库就分为远程仓库和本地仓库,远程仓库就是人家包裹的老巢(比如maven全球中央仓库:https://search.maven.org/,id:central),本地仓库就是自己的窝,坐标位置就是仓库的货架号,用于定位到实际的包裹。好了,既然我们拿到包裹了,该怎么用呢?先看如下一个maven配置文件示例:

xmlns="http://maven.apache.org/POM/4.0.0"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

test.maven

helloworld

1.0.0-SNAPSHOT

test.maven

helloworld.parent

1.0.0-SNAPSHOT

module1

1.0.0-SNAPSHOT

test.maven

helloworld.dependency

1.0.0-SNAPSHOT

test

test.maven

helloworld.dependency

1.0.0-SNAPSHOT

maven-source-plugin

2.4

true

compile

jar

org.apache.maven.plugins

maven-surefire-plugin

3.0.0-M1

releases

http://

snapshots

http://

mvn install 会将项目生成的构件安装到本地Maven仓库mvn deploy 用来将项目生成的构件分发到远程Maven仓库本地Maven仓库的构件只能供当前用户使用,在分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件。因此我们需要配置POM的来指定Maven远程分发构件的位置。setting.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

/Users/liliang/.m2/repository

snapshots

admin

12345

releases

admin

12345

ele-pub

*

http://

配置文件配好后,我们就可以使用maven的命令操作了maven的命令有一个生命周期,是作者根据软件工程经验构思出来的,分为三个阶段:clean清理项目,将本地target目录下之前编译好的文件全部清空default核心阶段,包括complie,test,package,intallsite生成项目站点,部署到服务器上,包括deploy通过这3个阶段的maven命令后,就能够构建部署好一个项目了。发布于 2020-06-26 16:46MavenJavaJava 编程​赞同 2​​添加评论​分享​喜欢​收藏​申请

什么是Maven? - 知乎

什么是Maven? - 知乎首发于java那点事切换模式写文章登录/注册什么是Maven?安然该篇文章篇幅很长,大概的思路如下maven的介绍,初步认识,获取jar包的三个关键属性 --> 介绍仓库(获取的jar包从何而来)-->用命令行管理maven项目(创建maven项目) --> 用myeclipse创建maven项目 -->详细介绍pom.xml中的依赖关系(坐标获取、定位jar包的各种属性讲解。一、简单的小问题?解释之前,提1个小问题。1.1、假如你正在Eclipse下开发两个Java项目,姑且把它们称为A、B,其中A项目中的一些功能依赖于B项目中的某些类,那么如何维系这种依赖关系的呢?很简单,这不就是跟我们之前写程序时一样吗,需要用哪个项目中的哪些类,也就是用别人写好了的功能代码,导入jar包即可。所以这里也如此,可以将B项目打成jar包,然后在A项目的Library下导入B的jar文件,这样,A项目就可以调用B项目中的某些类了。这样做几种缺陷如果在开发过程中,发现B中的bug,则必须将B项目修改好,并重新将B打包并对A项目进行重编译操作在完成A项目的开发后,为了保证A的正常运行,就需要依赖B(就像在使用某个jar包时必须依赖另外一个jar一样),两种解决方案,第一种,选择将B打包入A中,第二种,将B也发布出去,等别人需要用A时,告诉开发者,想要用A就必须在导入Bjar包。两个都很麻烦,前者可能造成资源的浪费(比如,开发者可能正在开发依赖B的其它项目,B已经存储到本地了,在导入A的jar包的话,就有了两个B的jar),后者是我们常遇到的,找各种jar包,非常麻烦(有了maven就不一样了)1.2、我们开发一个项目,或者做一个小demo,比如用SSH框架,那么我们就必须将SSH框架所用的几十个依赖的jar包依次找出来并手动导入,超级繁琐。 上面两个问题的描述,其实都属于项目与项目之间依赖的问题[A项目使用SSH的所有jar,就说A项目依赖SSH],人为手动的去解决,很繁琐,也不方便,所以使用maven来帮我们管理二、maven到底是什么?Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具[百度百科]这种又是大白话,如果没明白maven是什么,那么上面这句话跟没说一样,我自己觉得,Maven的核心功能便是合理叙述项目间的依赖关系,通俗点讲,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包,而这里pom.xml文件对于学了一点maven的人来说,就有些熟悉了,怎么通过pom.xml的配置就可以获取到jar包呢?pom.xml配置文件从何而来?等等类似问题我们需要搞清楚,如果需要使用pom.xml来获取jar包,那么首先该项目就必须为maven项目,maven项目可以这样去想,就是在java项目和web项目的上面包裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能了(通过pom.xml添加jar包)。所以,根据上一段的描述,我们最终的目的就是学会如何在pom.xml中配置获取到我们想要的jar包,在此之前我们就必须了解如何创建maven项目,maven项目的结构是怎样,与普通java,web项目的区别在哪里,还有如何配置pom.xml获取到对应的jar包等等,这里提前了解一下我们如何通过pom.xml文件获取到想要的jar的,具体后面会详细讲解该配置文件。pom.xml获取junit的jar包的编写。为什么通过groupId、artifactId、version三个属性就能定位一个jar包?加入上面的pom.xml文件属于A项目,那么A项目肯定是一个maven项目,通过上面这三个属性能够找到junit对应版本的jar包,那么junit项目肯定也是一个maven项目,junit的maven项目中的pom.xml文件就会有三个标识符,比如像下图这样,然后别的maven项目就能通过这三个属性来找到junit项目的jar包了。所以,在每个创建的maven项目时都会要求写上这三个属性值的。三、maven的安装这一步maven环境的配置,我觉得有必要安装一下,目的为了使用命令行创建maven项目,和使用命令行操作maven项目。这里不细讲,给出链接,跟安装jdk环境类似,maven的安装教程和配置 还有注意,我以下用的是maven3.0.4版本(比较低的),你们可以下载最新的版本,最好是使用jdk1.7.四、仓库的概念通过pom.xml中的配置,就能够获取到想要的jar包(还没讲解如何配置先需要了解一下仓库的概念),但是这些jar是在哪里呢?就是我们从哪里获取到的这些jar包?答案就是仓库。仓库分为:本地仓库、第三方仓库(私服)、中央仓库4.1、本地仓库Maven会将工程中依赖的构件(Jar包)从远程下载到本机一个目录下管理,每个电脑默认的仓库是在 $user.home/.m2/repository下例如我的就在:C:\Users\Administrator\.m2\repository一般我们会修改本地仓库位置,自己创建一个文件夹,在从网上下载一个拥有相对完整的所有jar包的结合,都丢到本地仓库中,然后每次写项目,直接从本地仓库里拿就行了这里面有很多各种各样我们需要的jar包。修改本地库位置:在$MAVEN_HOME/conf/setting.xml文件中修改,D:\java\maven\repository:就是我们自己创建的本地仓库,将网上下载的所有jar包,都丢到该目录下,我们就可以直接通过maven的pom.xml文件直接拿。4.2、第三方仓库第三方仓库,又称为内部中心仓库,也称为私服私服:一般是由公司自己设立的,只为本公司内部共享使用。它既可以作为公司内部构件协作和存档,也可作为公用类库镜像缓存,减少在外部访问和下载的频率。(使用私服为了减少对中央仓库的访问私服可以使用的是局域网,中央仓库必须使用外网也就是一般公司都会创建这种第三方仓库,保证项目开发时,项目所需用的jar都从该仓库中拿,每个人的版本就都一样。注意:连接私服,需要单独配置。如果没有配置私服,默认不使用4.3、中央仓库Maven内置了远程公用仓库:http://repo1.maven.org/maven2这个公共仓库是由Maven自己维护,里面有大量的常用类库,并包含了世界上大部分流行的开源项目构件。目前是以java为主工程依赖的jar包如果本地仓库没有,默认从中央仓库下载总结:获取jar包的过程五、使用命令行管理maven项目 5.1、创建maven java项目自己创建一个文件夹,在该文件夹下按shift+右击,点开使用命令行模式,这样创建的maven[java]项目就在该文件夹下了。命令:mvn archetype:create -DgroupId=com.wuhao.maven.quickstart -DartifactId=simple -DarchetypeArtifactId=maven-archetype-quickstartmvn:核心命令archetype:create:创建项目,现在maven高一点的版本都弃用了create命令而使用generate命令了。-DgroupId=com.wuhao.maven.quickstart :创建该maven项目时的groupId是什么,该作用在上面已经解释了。一般使用包名的写法。因为包名是用公司的域名的反写,独一无二-DartifactId=simple:创建该maven项目时的artifactId是什么,就是项目名称-DarchetypeArtifactId=maven-archetype-quickstart:表示创建的是[maven]java项目运行的前提:需要联网,必须上网下载一个小文件运行成功后在D:\java\maven\demo下就会生成一个simple的文件,该文件就是我们的maven java项目 5.2、maven java项目结构          simple            ---pom.xml    核心配置,项目根下            ---src             ---main                      ---java    java源码目录               ---resources  java配置文件目录             ---test               ---java    测试源码目录               ---resources  测试配置目录图中有一个target目录,是因为将该java项目进行了编译,src/main/java下的源代码就会编译成.class文件放入target目录中,target就是输出目录。 5.3、创建 maven web 项目命令:mvn archetype:create -DgroupId=com.wuhao.maven.quickstart -DartifactId=myWebApp -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot其他都差不多,创建maven web项目的话 -DarchetypeArtifactId=maven-archetype-webapp 比创建java项目多了一个 -Dversion=0.01-snapshot, 在创建java项目的时候也可以加上这个,如果不写,会默认帮我们加上1.0-snapshot。在D:\java\maven\demo下就会生成一个myWebApp的文件  5.4、maven web项目结构          pom.xml 核心配置          src/main/java java源码          src/main/resources java配置          src/main/webapp myeclipse web项目中 WebRoot目录              |-- WEB-INF             |-- web.xml          src/test 测试          target 输出目录 5.5、命令操作maven java或web项目           编译:mvn compile  --src/main/java目录java源码编译生成class (target目录下)          测试:mvn test    --src/test/java 目录编译          清理:mvn clean    --删除target目录,也就是将class文件等删除          打包:mvn package  --生成压缩文件:java项目#jar包;web项目#war包,也是放在target目录下          安装:mvn install   --将压缩文件(jar或者war)上传到本地仓库          部署|发布:mvn deploy  --将压缩文件上传私服 5.6、例子:使用命令操作maven java项目          注意:使用命令时,必须在maven java项目的根目录下,及可以看到pom.xml          描述:将maven java项目打包上传到本地仓库供别人调用            使用 mvn install在本地仓库中查看是否有该项目                D:\java\maven\repository\com\wuhao\maven\quickstart\simple\1.0-SNAPSHOT通过在本地仓库中的目录可以发现为什么通过groupId、artifactId、version可以定位到仓库中得jar包,也可以知道为什么groupId要使用公司域名的反写(因为这样唯一,不会与别的项目重名导致查找到的内容不精确) 5.7、maven项目的完整生命周期,当执行生命周期后面命令时,前面步骤的命令自动执行红色标记字体的意思就是当我们直接使用mvn install命令对项目进行上传至本地仓库时,那么前面所有的步骤将会自动执行,比如源代码的编译,打包等等。 5.8、其他命令maven java或web项目转换Eclipse工程mvn eclipse:eclipsemvn eclipse:clean  清楚eclipse设置信息,又从eclipse工程转换为maven原生项目了    ...转换IDEA工程mvn idea:ideamvn idea:clean  同上 六、使用Myeclipse创建maven自定义项目使用myeclpse创建项目前,需要在myeclipse中配置maven的一些信息比如:配置本地仓库、安装自定义maven(myeclipse中高版本自带了maven)等,这里省略。 6.1、java项目1、选择maven project,如果右键新建没有,通过other获得2、创建一个简单项目(跳过骨架选择)3、设置项目参数,创建java项目4、创建java项目结果 6.2、创建maven web项目          1、同上          2、同上          3、设置项目参数,其他一样,选择打包方式不一样。4、创建web项目结果5、可能报错1:pom.xml报错结果如下 然后需要更新一下项目,就不报错了。6、报错2,编写jsp时报错 错误信息为缺少serlvet-jar和jsp-jar包 解决:使用pom.xml定位导入相应的jar包 找到jsp-jar包,scope的作用是表示该jar包的作用范围,provided表示在编译和测试期有效,在运行期则无效。具体后面讲解pom.xml时会讲解到。     找到servle-jar包pom.xml中检查,修改修改完后,发现两个jar包都加载进来了,项目完好,不在报错了。 6.3、创建maven项目都一样,在项目参数那里修改即可结果maven项目一般没用,在开发中将一个项目拆分成多个项,就需要使用maven项目(pom项目)将其他子项目进行整合,下一章节讲解,很重要。很重要。 6.4、myeclipse maven操作6--9 都是快捷方式9 测试,相当于命令行 mvn test8 安装,相当于命令行 mvn install 作用:将其上传到本地仓库,具体见上面讲解7 关联源码,这个不需要解释吧,平常我们使用别的jar包也关联过源码6 清理,mvn clean5 maven bulid  执行maven命令,等效 mvn4 maven build 5快速的操作如果没有操作过,与5相同如果操作过一次,将直接执行上一次5的命令如果操作多次,将提供选择框 6.5、例子,将maven web项目发布到tomcat运行命令:tomcat:run通过网址即可访问,同时会将该项目上传到本地仓库。七、pom.xml的依赖关系讲解(重点)之前一直在使用pom.xml中找jar包最关键的三个属性,groupId、artifactId、version,应该有些印象了,也知道为什么通过这三个能找到对应的jar包,但是没有细讲其中的一些小的知识点,比如上面添加servlet-jar和jsp-jar的依赖时,出现的一些属性就不太懂,所以,这一章节,就将依赖关系全面分析。7.1、如何获取坐标(也就是三个关键属性值)方式1:使用网站搜索[从中央仓库拿]步骤一:百度搜索关键字“maven repository”步骤二:输入关键字查询获得需要内容,确定需要版本步骤三、获得坐标方式2、使用本地仓库,通过myeclipse获得坐标上面已经介绍过了如何从本地仓库获取对应jar,这里在简单阐述一下步骤一:添加依赖,pom.xml文件中,右键   步骤二:获得坐标 7.2、依赖(坐标)的常见配置为了避免不知道说的哪些配置属性,看下面图就明白了,就是dependency下的属性配置,全部有9个,讲其中的7个。groupId、artifactId、version是依赖的基本坐标,缺一不可,这三个可以不用将,都知道,重要的是除了这三个之外的配置属性需要我们理解type:依赖的类型,比如是jar包还是war包等默认为jar,表示依赖的jar包 注意:pom.lastUpdated 这个我们在上面添加servlet-jar的时候就遇到过,看到lastUpdated的意思是表示使用更新描述信息,占位符作用,通俗点讲,选择该类型,jar包不会被加载进来,只是将该jar包的一些描述信息加载进来,使别的jar包在引用他时,能够看到一些相关的提示信息,仅此而已,所以说他是个占位符,只要记住他的jar包不会被加载进来。optional:标记依赖是否可选。默认值false比如struts2中内置了log4j这个记录日志的功能,就是将log4j内嵌入struts2的jar包中,而struts2有没有log4j这个东西都没关系,有它,提示的信息更多,没它,也能够运行,只是提示的信息就相对而言少一些,所以这个时候,就可以对它进行可选操作,想要它就要,不想要,就设置为false。exclusions:排除传递依赖,解决jar冲突问题依赖传递的意思就是,A项目 依赖 B项目,B项目 依赖 C项目,当使用A项目时,就会把B也给加载进来,这是传递依赖,依次类推,C也会因此给加载进来。这个有依赖传递有好处,也有坏处,坏处就是jar包的冲突问题,比如,A 依赖 B(B的版本为1),C 依赖 B(B的版本为2),如果一个项目同时需要A和C,那么A,C都会传递依赖将B给加载进来,问题就在这里,两个B的版本不一样,将两个都加载进去就会引起冲突,这时候就需要使用exclusions这个属性配置了。maven也会有一个机制避免两个都加载进去,maven 默认配置在前面的优先使用,但是我们还是需要使用exclusions来配置更合理,这里使用spring bean 和 struts2 spring plugin 来举例子说明这个问题并使用exclusions解决这个问题。(spring bean 和 struts2 spring plugin都需要依赖spring-core,但版本不一样)从本地仓库中找到这两个jar包maven自己的解决方案如下maven 默认配置在前面的优先使用,下面是证明先将spring-beans加载进去的,所以会将spring-beans依赖的spring-core的版本加载进来。先将struts2-spring-plugin加载进来,那么就会将其依赖的spring-core的版本加载进来 使用exclusions来配置即使struts2-spring-plugin 配置在前面,也需要使用3.2.0版本。则需要为struts2-spring-plugin 排除依赖(不使用3.0.5依赖)注意:这样,就将struts2-spring-plugin依赖的spring-core的版本排除依赖了,也就是该依赖的spring-core不会在加载进来,查看代码,看是否符合要求,如果不符合要求,需要手动的修改 scope:依赖范围,意思就是通过pom.xml加载进来的jar包,来什么范围内使用生效,范围包括编译时,运行时,测试时compile:默认值,如果选择此值,表示编译、测试和运行都使用当前jartest:表示只在测试时当前jar生效,在别的范围内就不能使用该jar包。例如:junit 。此处不写也不报错,因为默认是compile,compile包扩了测试runtime,表示测试和运行时使用当前jar,编译时不用该jar包。例如:JDBC驱动。JDBC驱动,在编译时(也就是我们写代码的时候都是采用接口编程,压根就没使用到JDBC驱动包内任何东西,只有在运行时才用的到,所以这个是典型的使用runtime这个值的例子),此处不写也不报错,理由同上provided,表示编译和测试时使用当前jar,运行时不在使用该jar了。例如:servlet-api、jsp-api等。【必须填写】什么意思呢? 在我们以前创建web工程,编写servlet或者jsp时,就没导入过jar包把,因为myeclipse或者别的ide帮我们提供了这两个jar包,内置了,所以我们在编译期测试期使用servlet都不会报缺少jar包的错误,而在运行时期,离开了myeclipse或别的ide,就相当于缺失了这两个jar包,但此时tomcat又会帮我们提供这两个jar,以便我们不会报错,所以,这两个很特殊。看图1、开发阶段(MyEclipse提供),看下图以此证明我们说的java web 5.0项目:java web 6.0项目:2、运行阶段(tomcat提供)   所以,根据这个特点,如果使用maven开发项目,就不是web项目了,那么myeclipse就不会在给我们提供这两个jar包,我们就必须自己手动通过坐标从仓库中获取,但是针对上面的分析,当运行的时候,tomcat会帮我们提供这两个jar包,所以我们自己从仓库中获取的jar包就不能和tomcat中的冲突,那么就正好可以通过provided这个属性,来设置这两个jar的作用范围,就是在变异时期和测试时期生效即可。这个例子就可以解释上面创建maven web时产生的错误和解决方案了。system:表示我们自己手动加入的jar包,不属于maven仓库(本地,第三方等),属于别得类库的这样的jar包,只在编译和测试期生效,运行时无效。一般不用                     7.3、依赖调节原则这个就是maven解决传递依赖时jar包冲突问题的方法,按照两种原则,上面已经介绍了一种了,就是下面的第二原则1、第一原则:路径近者优先原则A-->B-->C-->D-->X(1.6)E-->D-->X(2.0)使用X(2.0),因为其路径更近 2、第二原则:第一声明者优先原则。就是如果路径相同,maven 默认配置在前面的优先使用A-->B --> X(1.6)C-->D--> X(2.0)这样就是路径相同,那么如果A在前面,C在后面,则使用X(1.6)maven会先根据第一原则进行选择,第一原则不成,则按第二原则处理。八、总结这篇文章的篇幅有点长,也消耗了我挺多的时间的,因为其中遇到一些bug,一直找不出原因,一度想放弃,但还是坚持了下来,这也只是maven的入门,知道大概怎么用,看别的应该就看得懂。福利专区:如果你想要的话可以评论区下方留言。原文链接:https://www.cnblogs.com/whgk/p/7112560.html 发布于 2019-04-29 14:16JavaMavenJava 程序员​赞同 152​​10 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录java

Maven是什么 - 知乎

Maven是什么 - 知乎首发于基础架构切换模式写文章登录/注册Maven是什么洋万里​东南大学 通信工程硕士在读Maven的定义Maven是一个用于构建(Build)、发布(Publish)、管理(Manage)Java项目的强大工具。它提供了一种标准的项目结构和构建流程,使得Java项目的开发、构建和管理更加简单和高效。Maven解决了什么问题在没有Maven前,Java的应用构建存在了哪些问题?手动构建: 开发者需要手动编译Java源代码、打包应用等。这需要大量的重复工作,并容易引入错误。依赖管理混乱: 管理外部依赖通常需要手动下载JAR文件、将它们放置在适当的位置,并手动配置类路径。这容易导致版本冲突和混乱。构建差异: 不同项目的构建流程可能不同,导致了构建流程的差异化和项目结构的不一致。项目结构不一致: 没有明确的标准项目结构,开发者可以根据他们自己的偏好组织项目,这导致了项目之间结构的不一致。可维护性差: 缺乏一种标准的方式来组织和管理项目,这使得项目的可维护性较差,尤其是在大型项目中。版本控制问题: 项目的依赖关系和构建设置通常需要版本控制,但手动管理这些文件可能会引入冲突和错误。缺乏标准化工具: 缺乏一种标准化的工具或流程来自动化构建、测试和部署,开发者需要自己开发或维护这些工具。Maven的出现解决了上述问题,它引入了标准的项目结构、依赖管理、构建生命周期和插件体系,使得Java应用的构建变得更加一致、自动化和可维护。Maven的构建过程Maven的构建过程是分阶段的,通常包括清理(clean)、编译(compile)、测试(test)、打包(package)、安装(install)、部署(deploy)等阶段。IDEA中的Maven Lifecycle如图,Lifecycle指的是构建过程中不同的阶段。而Plugins提供的是在不同阶段执行不同目标的操作。在Lifecycle中,Maven能做的事如下:清理(clean):删除编译的结果,为重新编译做准备。验证(validate):验证项目是否正确且所有必须信息是可用的。编译(cpmpile):源代码编译成字节码文件测试(test):针对于项目中的关键点进行测试,也可用项目中的测试代码去测试开发代码打包(package):将项目中包含的多个文件压缩成一个文件,用于安装或部署(java项目打成一个jar包,web项目打成一个war包,父工程-pom)检查(verify):对集成测试的结果进行检查,以保证质量达标安装(install):将打成的包,放到本地仓库,供其他项目使用。部署(deploy):将打成的包,放到服务器上,准备运行。Maven的重要概念项目对象模型(Project Object Model,POM): Maven使用POM文件(通常是pom.xml)来描述项目的结构和构建配置。POM文件包含了项目的依赖关系、插件配置、构建目标等信息。依赖管理: Maven可以自动管理项目的依赖关系。你可以在POM文件中声明需要的外部库,Maven会自动下载和管理这些库的版本,并确保它们在构建和运行时可用。生命周期和插件: Maven定义了一组构建生命周期(如clean, compile, test, package等),每个生命周期包含一系列构建目标。插件是执行这些目标的工具,你可以配置插件来执行各种任务,如编译、测试、打包等。中央仓库: Maven有一个中央仓库,其中包含了大量的开源Java库和插件。你可以从中央仓库下载依赖,无需手动管理库的获取和版本升级。多模块支持: Maven支持构建多模块项目,每个模块可以有自己的POM文件,但它们可以共享依赖关系、插件配置和构建设置。插件生态系统: Maven有丰富的插件生态系统,你可以使用现有插件或编写自定义插件来扩展和自定义构建过程。一致的目录结构: Maven鼓励项目遵循一致的目录结构,使得项目更容易管理和理解。总结:POM.xml本质上是对项目信息的一种抽象,Maven基于POM对项目进行依赖管理,自动获取依赖的JAR包,并可以通过配置的方式解决依赖冲突问题。其实项目中依赖管理是比较麻烦的,特别是手动引入的时候容易造成版本冲突问题。那么maven提供一种方式,我们把依赖包都放到一个仓库中Repository。每个Maven项目中,都会有一个POM(Project Object Model)的文件,上面清晰的定义了项目的一些元信息、配置和依赖。那么Maven可以基于POM自动的从仓库中奖相应的依赖与项目进行关联,并通过Maven构建一件打包,部署上线。这里对Mavne的仓库进行简单说明:本地仓库 : 相当于缓存。本地仓库存储在本地的磁盘当中,里面存放的是经常使用的JAR包。远程仓库 : 也叫做私服。基本每个公司都会有自己的私服,当本地的磁盘中不存在需要的JAR包资源,则会请求私服进行资源下载。中央仓库 : 远程仓库,由Maven专业团队统一维护。中央仓库地址:Maven项目创建Maven项目需要使用Maven的(Archetype )原型机制。那么什么是原型机制呢?”原型被定义为一种原始模式或模型,所有其他同类事物都是由它构成的。在 Maven 中,原型是一个项目模板,它与一些用户输入相结合,生成一个根据用户需求定制的工作 Maven 项目。“我们就把它理解为模板就行。现在来看Maven项目POM文件的构成

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.mycompany.app

my-app

1.0-SNAPSHOT

my-app

http://www.example.com

UTF-8

1.7

1.7

junit

junit

4.11

test

... lots of helpful plugins

pom.xml包含该项目的项目对象模型 (POM)。POM 是 Maven 中的基本工作单元。 Maven 本质上是以项目为中心的。POM 包含有关项目的重要信息。上面是一个非常简单的 POM,逐一介绍里面的元素:project 这是所有 Maven pom.xml 文件中的顶级元素。modelVersion 该元素指示该 POM 使用的对象模型的版本。模型本身的版本很少更改,但是当 Maven 开发人员认为有必要更改模型时,为了确保使用的稳定性,这是强制性的。groupId 该元素指示创建项目的组织或组的唯一标识符。groupId 是项目的关键标识符之一,通常基于组织的完全限定域名。例如org.apache.maven.plugins为所有 Maven 插件指定的 groupId。artifactId 此元素指示由该项目生成的artifact 的唯一基本名称。Maven 生成的包名的格式为 -.(例如,myapp-1.0.jar)。version 此元素指示项目生成的artifact 的版本。Maven 在很大程度上帮助沃恩进行版本管理,在开发中经常会看到SNAPSHOT,这表明这个包只是一个测试版本。name 此元素指示用于项目的显示名称。这在 Maven 生成的文档中经常使用。url该 元素指示可以找到项目站点的位置。这在 Maven 生成的文档中经常使用。property 用于创建POM中的变量,在文件中可以通过引用变量的方式来赋值。dependencies 存放依赖的地方,每个标签都是一个依赖build 该元素处理诸如声明项目的目录结构和管理插件之类的事情。我们通过ArcheType生成项目的结构一般为:my-app

|-- pom.xml

`-- src

|-- main

| `-- java

| `-- com

| `-- mycompany

| `-- app

| `-- App.java

`-- test

`-- java

`-- com

`-- mycompany

`-- app

`-- AppTest.java这是Maven的标准项目目录,有源分支和测试分支。POM.xml存放于${project.basedir}中。我们的应用源码一般放在${project.basedir}/src/main/java,测试源码放在${project.basedir}/src/test/java。项目编译当我们对项目进行编译时,Maven会下载所有的插件和项目相关的依赖。编译之后的类文件都会放在${project.basedir}/target/classes中,这也是一个Maven 标准格式的文件夹。target目录依赖管理管理依赖的标签为dependencyManagement和dependencies。dependencyManagement定义依赖信息,在后续引入依赖时不用重复定义version、scope等在此处定义的依赖无法直接生效,只是作为管理使用父项目中的dependencyMangementdependencies节点中定义的依赖在编译时build,自动会引入此包到路径下除非在dependencyManagement中有定义版本,否则版本不能为空总结:Management作为管理,只是将项目所需要的依赖进行列举,最终使用需要dependencies标签中定义。参考文档https://maven.apache.org/guides/getting-started/index.html编辑于 2023-11-07 21:45・IP 属地江苏Java 开发MavenJava​赞同 1​​添加评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录基础架构探索大厂基础架构的基

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_百度百科

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。构建规则或多或少是静态的,除非使用