关于Maven的配置与学习
1. 简介
官方说法:Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.
个人译文:Apache Maven是一款软件项目管理及综合工具。基于项目对象模型这个概念,Maven能够从一个中心信息块管理项目的构建,报告和文档。
个人对于Maven的直观感受就是工程项目被生命化了,从一个项目的初始到开发结束,它都在帮助开发者做后援工作,相当于助长剂。对于我来说主要的是项目依赖问题,不用自己去拷jar包确实是方便许多。
2. Windows下安装和配置
某些IDE已经是集成了Maven了(例如:idea),但是这里还是说一下怎么从官网下载并且配置环境变量
2.1 下载Maven
Maven官网:https://maven.apache.org/
进入官网后可以点击Download下拉可见有多个下载链接。如果不是特殊爱好/用途,下载头两个压缩包其中一个解压就可以。
2.2 配置Maven
解压后进入我的电脑(右击)->属性->高级系统设置->环境变量
,进入后点击新建..
,变量名为M2_HOME
,变量值为自己解压后Maven的位置,我这里为C:\tool\apache-maven-3.5.0
经过上面的配置变量已经有了,但是还需要配置Windows系统变量,这样才找的到Maven的路径(在cmd模式下使用mvn命令),这里只需要将%M2_HOME%\bin;
加入到Path
的最前端就可以了,如下图:
通过以上的配置在cmd下键入mvn -version
出来一大串信息,包括Maven路径、版本等信息就说明配置成功
2.3 配置Maven镜像和本地仓库
本地仓库会从把从别的地方的jar包下载后本地保存,相当于一个缓存,如果说不配置它默认会下载至${user.home}/.m2/repository
,如果需要配置到一个特定的目录只需要进入Maven的解压目录/conf/setting.xml
文件,使用编辑器打开,然后修改里面的配置<localRepository>C:/...../localRepository</localRepository>
在使用Maven管理依赖时,它可能会去别的仓库下载jar包,有可能网速会受到限制,所以使用镜像下载是一个比较好的选择,这里我使用了阿里的镜像。
在setting.xml
,我们可以看到下方有<mirrors></mirrors>
这一个项,这里只需要向里面添加代码
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
3. Maven仓库
关于Maven的仓库这里可以简单的理解为存放jar包的地方,一个云盘。
但是,关于存放的位置还是有略微的区别,有远近之分,近的看来有本地仓库
和私服
远的有中央仓库
和其他私人仓库
- 本地仓库:通过本地存储依赖包,在项目构建需要时直接提供
- 私服:由个人/组织搭建,在局域网上的服务器运行,由该服务器提供依赖包
- 中央仓库:Maven依赖包的主要来源
- 其他私人仓库:需要使用的依赖包在他人服务器而不在在中央仓库没有的情况下,需要自己配置远程的仓库,它在中央仓库找不到下会去该仓库查找,其配置如下:
<repositories>
<repository>
<id>companyname.lib1</id>
<url>http://download.companyname.org/maven2/lib1</url>
</repository>
</repositories>
按照个人理解,画了一个图,如下:
4. Maven的生命周期
4.1 clean周期
周期阶段 | 具体描述 |
---|---|
pre-clean | 执行一些清理前需要完成的工作 |
clean | 清理上一次构建生成的文件 |
post-clean | 执行一些清理后需要完成的工作 |
在每一个周期有相应的Maven命令,比如,在重新构建项目需要把前面的清除,则可以在当前项目目录下cmd模式输入mvn clean
|| mvn post-clean
4.2 default周期
在default周期中包含了很多个阶段,其中这里列出比较常用的
周期阶段 | 具体描述 |
---|---|
compile | 编译该项目的源代码 |
test | 运行测试使用合适的单元测试框架 |
package | 提取编译后的代码,并在其分发格式打包,如JAR,WAR或EAR文件 |
install | 将包安装到本地存储库,它可以用作当地其他项目的依赖 |
deploy | 复制最终的包到远程仓库与其他开发者和项目共享 |
关于install,可以使用mvn install
命令将我们自己的项目添加/安装到我们的本地仓库,比如,我们在多模块开发时,因为项目的依赖有些模块是完全相同的,所以我们可以建立一个父工程,让其他相关的模块继承该父工程。父工程的打包方式是pom
,这里在子工程中编译项目时就会遇到父工程依赖不存在的一些错误,这时就需要使用上述的命令mvn install
将我们的项目安装到本地仓库。对于Maven工程,自己写的库需要打成jar包让其他项目依赖,也可以使用该命令
4.3 site周期
siet生命周期能够生成一些网页信息(基于POM所包含的信息)
周期阶段 | 具体描述 |
---|---|
pre-site | 执行一些在生成项目站点之前需要完成的工作 |
site | 生成项目站点文档 |
post-site | 执行一些在生成项目站点之后需要完成的工作 |
site-deploy | 将生成的项目站点发布到服务器上 |
当我使用之前博客上的Spring Boot会员系统测试site命令时 执行了mvn site
可在项目路径下看到target/site/index.html,点开后有关于该项目的各种依赖的详细信息,如下图:
在上述的周期中对应着各种Maven命令,有些命令可以同时键入,比如:mvn clean package
,每个命令的执行都与Maven提供的插件有着一些密不可分的关系,这里可以看下这里的链接:
https://www.yiibai.com/maven/maven_build_life_cycle.html
https://blog.csdn.net/chaofanwei/article/details/36197183
https://www.cnblogs.com/build-up/p/4975827.html
https://www.cnblogs.com/avivaye/p/5341341.html
5. 项目开发中的Exception
这里举出两个例子,其一:
maven打包时报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test
这里可能是因为在打包时会自动执行测试命令,而Junit测试不通过导致的打包不成功,只需要添加下面的配置即可:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
其二:
在web项目中使用servlet和jsp时需要引入依赖来解决错误,但是在web发布时打成war包部署到tomcat就会报错,提示信息大概是类之间有冲突。这是因为tomcat已经有包含了servlet的依赖包,因此报错,这里只要在servlet和jsp的依赖中加入一个scope
配置,如下:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
在上面的依赖的scope
中包含了几个选项,主要如下:
分类 | 使用范围 |
---|---|
compile | 编译(compile)时需要,测试时需要,运行时需要,打包时需要 |
provided | 编译(compile)时需要,测试(test)时也需要 ,运行时不需要,打包时不需要 |
runtime | 编译时不需要,测试时需要,运行时需要,打包时需要 |
test | 编译时不需要,测试时需要,运行时不需要,打包也不需要 |
除了以上还有一个是system
,但是个人没有怎么使用所以这里不做说明
6. 总结
关于以上的东西,个人在见解上可能还存在偏差,但是,Maven作为项目管理的一个工具,只需要把工具的主要功能发挥出来就行了。现在该要纠结的不应该是Maven存在的那些复杂的东西,而是把自己的代码写好先
参考链接
https://maven.apache.org
https://www.yiibai.com/maven/
https://baike.baidu.com/item/Maven/6094909?fr=aladdin
https://blog.csdn.net/zjf280441589/article/details/53044308
https://www.cnblogs.com/li3807/p/6416197.html
关于Maven的配置与学习的更多相关文章
- Maven学习第2期---Maven安装配置
一.Maven介绍 1.1 何为Maven Maven这个词可以翻译为"知识的积累",也可以翻译为"专家"或"内行".Maven是一个跨平台 ...
- Maven 学习笔记——Maven环境配置(1)
在学习Selenium的过程中,接触到了Maven(项目管理工具),不至于学一路忘一路,左耳朵进右耳多出,还是决定边学边记录,毕竟听的不如 看的,看的不如写的吗.首先学一样东西,肯定得明确学的是什么, ...
- 【maven教程】(1)---maven环境配置
maven环境配置 刚开始学习maven,现在项目需要用到maven,而且他确实很好用,也比较容易上手,我也是主要通过视频学习,在写博客的时候也会总结其它人所写 博客,从简到难,如果你也是初学者那接下 ...
- Java-Maven(四):Eclipse集成Maven环境配置
一般maven都需要集成到IDE上使用的,而不是单独的使用,常见的maven可集成IDE:eclipse.IntelliJ IDEA.但这里就只学习eclipse集成maven的基础上,进行maven ...
- maven的配置及一些常用命令
一般来说,github上大多的java项目都是使用maven,ant等进行构建的.由于之前没有使用过maven,因此这几天对maven进行了简单的学习.古话说:“温故而知新”,一些命令长时间不使用都会 ...
- 2. maven的配置和使用
参考网址:创建maven项目 引言:关于使用idea创建maven工程,以上的这篇博客已经写的很清楚,可以完全参照,我这里就不在重复,以下只 针对上面的这个教程不足或者描述不全面的地方做补充. 目录: ...
- 转载maven安装,配置,入门
转载:http://www.cnblogs.com/dcba1112/archive/2011/05/01/2033805.html 本书代码下载 大家可以从我的网站下载本书的代码:http://ww ...
- 第一章 Maven 安装配置
Maven基于(POM)项目对象模型,通过一小段描述信息来管理项目的构建.文档.和报告的项目管理软件,类似于php 的管理构建工具composer. 有关详细的Maven学习,可以参考学习https: ...
- 国内可用maven repository 配置
国内可用maven repository 配置 发表于2016/1/4 23:08:04 10235人阅读 分类: maven 鉴于一些原因,从maven中央仓库download依赖包时,被各种折磨 ...
随机推荐
- Luogu P1092 虫食算
题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 其中# ...
- hadoop源码调试
原文地址:http://www.cnblogs.com/end/archive/2011/04/26/2029497.html 在使用hadoop的时候,可能遇到各种各样的问题,然而由于hadoop的 ...
- Centos安装jdk8
1.下载jdk1.8的tar cd /usr/local/src #切换到该目录下 wget url #下载jdk8的tar包 2.下载完成后解压tar包 tar -zxvf jdk-8u152-li ...
- shell脚本 awk工具
awk工具概述awk编程语言/数据处理引擎基于模式匹配检查输入文本,逐行处理并输出通常在shell脚本中,或取指定的数据单独用时,可对文本数据做统计 命令格式格式一:awk [选项] '[条件]{编辑 ...
- awk使用方法与案例介绍
一.awk简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切 ...
- yii学习笔记--使用gii快速创建控制器和模型
配置gii 'gii'=>array( 'class'=>'system.gii.GiiModule', 'password'=>'123456',//使用gii的密码 // If ...
- Java生成文件夹
Java生成文件夹 1.说明 判断文件夹是否存在,如果不存在就创建该文件夹,并打印其路径:如果存在,打印其路径 2.实现源码 /** * @Title:BuildFolder.java * @Pack ...
- (十九)java小练习
练习1:计算13-23+33-43+--+993-1003的结果 package demo; /** * 计算13-23+33-43+--+993-1003的结果 * @author tu ...
- Django学习-6-路由系统
1.url(r'^index/', views.index), 函数处理 url(r'^home/', views.Home.as_view()), 类方法处理 ...
- 四大组件之BroadcastReceiver基础
1. 系统广播 1.1 动态注册 (1)创建自定义接收器类继承自BroadcaseReceiver,实现onReceive()方法,对接收到的广播的逻辑处理就是写在这个函数中的. (2)实例化 ...