一、倘若没有 maven
当我们新建一个项目,在项目中完成
- 比如需要写一端jdbc代码,去读某张表中的数据。
- 使用Spring开发一个简单的crud。
在这些业务创建时需要导入很多jar包,或者在创建很多相似的项目时整体架构同样是相似的,比如需要contextConfiguration.xml、Struts-Config.xml、Hibernate.xml、Properties.xml之类的文件。这些都是重复的操作,如果我们没有maven工程就需要在每次业务中完成这些操作。
Maven可以做的事情
- jar包管理
- 项目的结构和管理
我们来看看百度百科对Maven的解释
二、Maven的介绍
jar包的管理
我们在使用Maven时应该告诉maven的一些内容:
- jar包的下载地址?
- 下载完成之后保存在哪边?
- 具体下载的jar包是什么?
项目的构建和管理
- 在工作结构上进行一些限制和要求
- 至少要创建一个自己比较满意的模板
- 对这个模板进行复制
三、下载与安装
1. 下载
在Maven的官网https://maven.apache.org/download.cgi中下载
2. 安装
注意:在maven安装之前,一定要已经安装了jdk
只需要将maven所在的目录的bin文件配置到Path环境变量中,这样做的目的是在命令行的任意目录下,都可以使用“maven”命令操作。
MAVEN_HOME类比JAVA_HOME ,把maven所在目录配置到这个MAVEN_HOME中
四、maven配置
maven的安装目录的conf文件夹中有一个settings.xml文件,而官网中又说在.m2文件夹下也有这样一个文件,这是一个默认文件夹,我们并不能发现。
将conf中的settings.xml文件复制到.m2文件下之后完成配置。
五、maven目录结构
- bin目录:包含了maven运行的一些,命令脚本
- boot目录:包含类加载器的一些东西
- conf目录:configuration包含一些配置文件
- lib目录:保存jar包
六、maven项目目录结构
项目目录结构,实际上指的是maven要求的项目必须的目录层次。
在这里我们要记住一句话:约定优于配置(Convention Over Configuration)
要使用maven进行jar包管理,以及项目的构建和管理等等,就要遵循maven的规定。在我们平时的写java项目的时候,在Eclipse/IDEA中想怎么创建就怎么创建,但在使用maven时,就不能这么随心所欲。
maven的项目结构
注意是resources文件,图上画错了。
对不起了各位(狗头)
七、手动创建Maven项目
用Maven执行文件
首先创建文件夹Maven,并按照上面的maven项目结构创建各种文件夹和文件。
在java文件夹中编写java程序,并且在网上找pom.xml的文件内容进行配置。
使用命令行进入到maven的工程中“Maven”,进行编译的命令是mvn.compile。
八、用IDEA创建一个Maven项目
以上过程中具体的配置信息以个人为准
九、Maven配置文件之settings.xml
该文件是maven的全局配置文件 (类似于-web项目中的web.xml),其中有许多标签,这里选择一些重要的列举。
(1)mirrors
在settings.xml文件中有一个mirrors标签,它表示配置镜像所在的路径的。默认的地址是国外的:https://repo.maven.apache…,maven要帮我们管理jar包,这些jar包下载的地址是从该地址下的,当然这个下载地址可以改变,就是通过mirrors标签。
<mirror>
<id>alimaven</id>
<name>aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
将这段代码配置到mirrors标签中即可。这是因为国外镜像的下载速度比较慢,所以可以考虑国内的奖项地址,比如阿里云
(2)localRepository
settings.xml文件中默认的本地仓库的位置在${user.home}/.m2/repository,当然我们可以对这个位置进行给更改:<localRepository>D://temp//repo</localRepository>
(自行指定)
(3)interactiveMode
标识maven是否需要和用户交互以获得输入。如果maven需要和用户交互以获得输入,那么则设置成true,不然则设置尾false。
(4)offline
标识maven是否需要在离线模式在运行
(5)pluginGroups
当插件的组织id(group)没有显示提供时,供搜寻插件组织id的列表
(6)proxies
用来配置不同的代理
(7)profiles
根据环境参数来调整构建配置的列表
(8)servers
仓库的下载和部署是在pom.xml文件中定义的。比如用户名,密码需要访问远程仓库的时候,有时需要安全认证,这个认证就可以配置在servers标签中。
十、Maven仓库
maven把jar包自动下载下来之后,这个保存jar包的目录是由我们自己指定的,可以自己指定这个目录存储的位置。当然它也有一个默认的位置 。
在maven构建项目的时候,它会帮助我们把项目中所需要的一些基础的jar包下载下来,这个下载的地址就是由settings.xml文件里面的mirrors标签所指定的。
maven仓库,实际上指的就是jar包下载下来之后保存的目录。
settings.xml文件中默认的本地仓库的位置在${user.home}/.m2/repository,当然我们可以对这个位置进行给更改:<localRepository>D://temp//repo</localRepository>
(自行指定)
十一、Maven配置文件值pom.xml
pom (project object model)项目对象模型,它为唯一表示该项目的文件
-
三个必填字段
由groupId、artifactId、version所组成的文件就可以唯一确定一个项目
groupId标识项目组(通常为公司的域名)组织
artifactId项目名称
version版本号
这三个标签是必填标签
-
dependencied标签 用来配置项目中具体需要用到的jar包
-
properties标签 用来定义pom中的一些属性
-
bulid 指定如何构建当前项目
source:指定了当前构建的souce目录
plugin:指定了进行构建时使用的插件 -
package标签 指定当前构建项目的类型,war、jar、pom
注意:pom文件时可以继承的,一个pom文件想要使用另一个pom文件中的内容,就可以使用继承的方式。
十二、Maven依赖
上面我们提到了pom文件中有一个dependencies标签,里面可以包含很多的dependency标签。这些标签就是maven的依赖。
maven项目中要下载指定的jar包,实际上就是在poim.xml我呢见的dependencies标签中进行配置,那这个dependencies怎么写,具体就是在 http://mvnrepository.com/ 中进行搜索。
进入网址之后搜索需要用到的工程的jar包,比如这里我们需要用到Spring的jar包,搜索之后选择一个版本,就可以得到dependenices标签的具体内容,将这段xml文件代码复制粘贴到本地仓库的pom文件中即可。再次对maven及逆行编译,就可以将jar包导入本地仓库。(注意:直接导入到工程中的pom文件中也是可以的,但是在删除pom文件中的jar包之后本地仓库中依旧会存在这个依赖)。
十三、Maven插件
什么是插件?
从官网中我们可以看出:maven实际上是一个依赖插件执行的框架,每个任务都是由插件完成的。
两种插件类型:
- Bulid plugins 在构建时执行,需要在pom.xml文件中的
<bulid>
标签中进行配置 - reporting plugins 在网站生成过程中执行,也需要在pom.xml文件中的
<reporting>
标签中进行配置
常用的插件列表
大家可以在官网中自行查看 (https://maven.apache.org/plugins/index.html)
这里列举一些常用的插件:
- clean 项目构建之后用于清理项目
- compiler 编译java源代码
- jar 构建jar文件
- war 构建war文件
使用插件的方法
<!--配置bulid类型的插件-->
<build>
<plugins>
<!--表示写好了一个clean类型的插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>2.5</version>
</plugin>
<!--表示写好了一个deploy类型的插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.5</version>
</plugin>
</plugins>
</build>
十四、Maven之archetype
当我们在完成一个项目后需要新建一个项目,并且这个项目与我们完成的项目有些许相似的时候,我们会将已经完成的项目中的一些内容拷贝过去。如果不适用maven,我们需要把大量的工具类、包逐个拷贝。但如果我们使用maven后,可以将这些内容封装在archetype中直接拷贝,这就方便了我们的操作。
对于maven本身来说,它会帮我们已经定义好一些archetype(脚手架),这些archetype时我们开发中常用的一些项目模板,当我们新建maven项目的时候,只需要选择对应的archetype即可。
但是有时官方提供的东西不符合个人定制化的需要,所以我们可以自己定义一套archetype。
-
在pom.xml文件中定义一个插件
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-archetype-plugin</artifactId> <version>2.5</version> </plugin> </plugins> </build>
-
在pom.xml文件所在的目录使用
mvn archetype:generate
先在命令行中用
mvn archetype:create-form-project
命令创建出target文件夹。 -
在target目录中会生成一个自定义的骨架。
在target中有一个generate-sources文件夹,在这个文件夹里就存放着archetype(脚手架)文件夹。
-
在本地安装一下这个archetype
mvn install
就把刚才的archetype安装到了本地。
十五、搭建Maven私服
在我们需要在项目中导入jar包的时候,如果使用的是国外的镜像,那么下载速度比较慢。如果使用的是阿里云之类的国内镜像速度还算可以。但是假如网速不好的情况下也是比较慢的。又如果在没有网的情况下就无法下载。
对于以上出现的情况,我们应该有这样的疑问:在团队开发的时候,是不是每个人在自己本地仓库都需要下载一份?能不能大家公用一份?
为了解决这个问题,我们就引入了maven私服。
假如当我们某个maven项目需要一份jar包的时候(假如就是mysql-connection.jar),先看一下本地仓库中是否有这个jar包(版本也要判断),如果有,则不下载。如果没有,则去下载,并且保存到本地仓库中,如果以后需要就不需要下载了。在项目中进行开发的时候,仅仅就是将本地仓库的jar包导入到工程里面即可,再也不用像传统原始方式那样,每个项目厚葬都需要有单独一个jar包,这样就不会造成jar包的冗余。
十六、Maven聚合项目
在之前提到的创建maven项目时,新建的都是单一的maven。
而在业务开发中我们很多情况下都要用到聚合项目——多module的maven项目。
Maven实际上可以有一个父项目,父项目下可以有很多子项目。
这里的Spring就是父项目,而其下的springmvc和springjdbc就是子项目。
方法:在创建完Spring的maven项目之后,删除掉main文件夹,再在Spring下创建springmvc和springjdbc的maven项目。