Maven学记
前言
在开发过程中有很多痛苦的开发经历:
- 包依赖的问题:jar包一般都不是独立存在的,一般一些jar也会用到其他的jar。比如a.jar依赖于b.jar,而b.jar又依赖于c.jar。当你用到a.jar的时候,你需要把3个jar包都加载进来才可以使用。当项目中用到很多jar包的时候,我们很难判断缺少哪些jar包,只有在项目运行过程报错了才知道。
- 包版本冲突问题:项目中用到了a.jar,a.jar依赖于c.jar的1.5版本,然后我们把这2个jar拷贝到项目中。后来又用到了b.jar,但是b.jar又依赖于c.jar的1.0版本,此时你把b.jar和c.jar的1.0版本引进来了,会发现c.jar有2个版本,发生冲突了。这种情况你要着手去解决jar包冲突的问题,也是非常痛苦的。
- 包的管理不方便:当我们的项目比较大的时候,我们会将一个大的项目分成很多小的项目,每个小项目由几个开发者负责,然后每个小项目都需要把这些jar拷贝一份到自己的项目目录中。
- 项目开发结构不统一:maven可以让大家都按照某种规范采用同一种项目结构,这样岂不是很方便么?大家按照某种约定,项目使用同样的结构来创建。
- 项目的生命周期控制方式五花八门:开发者除了编码之外,大多数时间都是在编译、打包、发布到测试环境,多数时间都在重复着跑单元测试、编译、打包、发布的工作。在没有自动化编译的时候,每个过程都需要我们手动去操作。
maven就是用来解决以上问题的:
包的管理和维护
统一的项目结构
统一的项目生命周期
一、Maven的安装
安装Maven
- 不要有汉字的目录
- 不要有空格
- 目录层次不要太深
配置环境变量
- MAVEN_HOME=安装目录
- Path=%MAVEN_HOME%\bin
二、Maven仓库的概念和配置
1.什么是POM
使用maven创建的项目,每个项目都有一个pom.xml配置文件,这是maven项目的配置文件。
POM的全称:Project Object Model 项目对象模型,按面向对象的思想来管理整个项目
在pom.xml文件中包含以下内容:
- 当前模块或项目的坐标
- 项目依赖了哪些jar包(常用)
- 项目使用了哪些插件等
2. Maven的仓库概念
项目所有的jar包都从仓库中去下载,仓库就是存放jar包的地方
仓库分类
本地仓库
相当于缓存,工程第一次会从远程仓库(互联网)去下载jar 包,将jar包存在本地仓库(在本地电脑上)。以后不需要从远程仓库去下载,先从本地仓库找,如果找不到才去远程仓库找。
远程仓库
中央仓库
仓库中的jar包由专业团队(maven团队)统一维护,有全球最完整,最通用的jar包。https://repo1.maven.org/maven2/
私服
在公司内部架设jar包的私有服务器,中央仓库中存放的是通用的jar包。公司自己开发的jar包可以放在公司内部的私服中供企业内部使用,私服仓库中也包含了大量中央仓库的jar包。访问私服仓库比访问中央仓库速度更快,更稳定。
第三方公共库
由大型公司搭建的服务器供大家使用的jar包服务器,例如:阿里云仓库 https://maven.aliyun.com/mvn/view
3.配置本地仓库
- 将本地仓库文件夹中的repository.rar解压,可以放在任意的位置,这是老师提供的本地仓库。
e:\repository
- 配置本地仓库,修改maven的安装目录中conf/settings.xml文件,在53行配置本地仓库为上面的目录。
<localRepository>e:\repository</localRepository>
- 可选配置,修改settings.xml文件,146行指定中央仓库的镜像。这里使用的是阿里云的中央仓库,速度比官方的快很多。注:在mirrors下面
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
- 修改maven使用JDK的版本,187行。如果不配置就需要在idea中配置。maven默认使用的是JDK1.5的版本,这里使用1.8的版本。注:在profiles下面
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
- 保存文件
3. Maven的坐标
Maven坐标的概念
每个jar包在仓库中都有一个唯一标识,这就是坐标,由以下三个元素组成
坐标的元素定义
命名规范:
<fon
元素名称 | 说明 |
---|---|
groupId | 表示一级或多级目录 |
artifactId | 表示下一级目录 |
version | 表示下一级目录 |
- groupId:对应一级或多级(组织或公司名字)
- artifactId:对应一级 (项目或模块名字)
- version:对应一级 (版本号)
4. IDEA中配置Maven环境
- 选择File–> Settings
选择File–>Other Settings (配置以后新创建的项目) ,如果这个没有配置以后每创建一个新的项目都要配置一次。 - 选择Build,Execution,Deployment–>Build Tools–>Maven
配置上述三项信息:Maven的主目录,配置文件settings.xml和本地仓库repository目录 - 选择Build,Execution,Deployment–>Build Tools -->Maven–>Runner,设置Maven启动虚拟机的选项:VMOption,设置所有资源先从本地仓库查找,如果本地仓库中没有才去互联网找。
-DarchetypeCatalog=internal
- 可选,如果汉字没有乱码则不用设置,Maven控制台输出中文如果出现乱码,则进行如下设置。
VMOptions配置多个参数需要使用空格隔开
VMoptions: -Dfile.encoding=GBK 或者 -Dfile.encoding=UTF-8
总结
至此maven和maven整合idea小记到此,博主idea版本为2013.1.3,maven版本为3.5.2