tokenpocket钱包网站首页|maven是干嘛的
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
的依赖定义:
复制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:公司或组织域名倒序+项目名
[2] artifactid:模块名
[3] version:版本
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关注问题写回答邀请回答好问题 81 条评论分享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">
默认包的路径,包括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">
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代码
轻松理解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">
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">
什么是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包 注意:
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"> ... lots of helpful plugins
|-- 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,然后点击编辑,找到
到这里,整个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坐标后,依赖不会立马生效,需要手动刷新一下项目:可以借助IDEA自带的Maven项目工具来进行刷新;也可以安装Maven-Helper插件,在项目上右键,然后通过Run Maven里的指令刷新。至此,大家就掌握了Maven的基本使用。PS:如果你本地仓库中有依赖,但忘了GAV坐标怎么写,通过IDEA工具,在pom.xml文件中按下alt+insert快捷键,接着点击Dependency,可以做到可视化快捷导入。1.2.3、依赖范围管理有时候,有些依赖我们并不希望一直有效,比如典型的JUnit测试包,对于这类jar包而言,最好只针对测试环境有效,而编译环境、运行环境中,因为用不到单元测试,所以有没有办法移除呢?这时可以通过
该标签共有五种取值方式,每种取值对应着一种依赖范围,而不同的依赖范围,生效的环境(classpath)也并不同,如下表所示:依赖范围编译环境测试环境运行环境compile生效生效生效provided生效生效不生效system生效生效不生效runtime不生效生效生效test不生效生效不生效项目引入的所有依赖,如果不显式指定依赖范围,默认是compile,意味着所有环境下都生效,而一般的依赖包也无需更改,只有某些特殊的依赖,才需要手动配置一下。如:JUnit、spring-test这类包,只在测试环境使用,所以配成test;Tomcat内置servlet-api包,为了避免在运行环境冲突,应该配成provided;……同时,
这里的plugin就是自定义的scope,表示该依赖只在Maven插件中生效。最后,
从图中结果可以明显看出,通过这种方式,可以手动移除包所依赖的其他包。当出现冲突时,通过这种方式将冲突的两个包,移除掉其中一个即可。其实还有种叫做“隐藏依赖”的手段,不过这种手段是用于多工程聚合项目,所以先讲清楚“多模块/工程”项目,接着再讲“隐藏依赖”。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:
眼尖的小伙应该能发现,此时多了一个
2.3.5、聚合工程的构建前面说到过,Maven聚合工程可以对所有子工程进行统一构建,这是啥意思呢?如果是传统的分模块项目,需要挨个进行打包、测试、安装……等工作,而聚合工程则不同,来看IDEA提供的Maven辅助工具:尾巴上带有root标识的工程,意味着这是一个父工程,在我们的案例中,有一个父、两个子,来看IDEA的工具,除开给两个子工程提供了Lifecycle命令外,还给父工程提供了一套Lifecycle命令,这两者的区别在哪儿呢?当你双击父工程的某个Lifecycle命令,它找到父POM的
不过这个功能有点鸡肋,了解即可,通常不需要用到。2.4、Maven属性回到之前案例的父工程POM中,此时来思考一个问题:虽然我们通过
而在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版聚合项目,需稍微改造:
对比普通聚合工程的父POM来说,SpringBoot版的聚合工程,需要先把spring-boot-starter声明成自己的“爹”,同时需要引入SpringBoot相关的插件,并且我在这里还引入了一个boot-web依赖。接着来创建子工程,在创建时记得选SpringBoot模板来创建,不过创建后记得改造POM:
配置完这个后,刷新当前Maven工程,IDEA中就会出现这个:默认停留在prod上,这是因为POM中用
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中,加一个依赖和插件:
最后来尝试启动子工程,操作流程如下:①在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私服中配置一下代理仓库地址,即配置镜像源:将这个默认的中央仓库地址,改为国内的阿里云镜像:http://maven.aliyun.com/nexus/content/groups/public/改完后记得拖动到最下方,点击Save保存一下即可。④在Maven的settings.xml中,配置私服的账号密码:
这两组配置,放到
③将当前项目发布到私服仓库,这里可以执行mvn clean deploy命令,也可以通过IDEA工具完成:不过这里有一个细节要注意,由于配置了私服上的两个宿主仓库,一个为稳定仓库,另一个为快照仓库,所以发布时,默认会根据当前项目的
在上述这组配置中,配置了
这组配置要写在
不过要记住,无论两种方式内的哪一种,都只允许从私服上拉取依赖,如果你的某个工程,想要打包发布到私服上,还是需要配置3.4阶段的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。构建规则或多或少是静态的,除非使用