看见大佬们的业务结构溜得飞起,难道你还不心动得想学Maven吗?

1、假若没有 maven

当咱们新建一个项目,在项目中完成html

  1. 好比须要写一端jdbc代码,去读某张表中的数据。
  2. 使用Spring开发一个简单的crud。

在这些业务建立时须要导入不少jar包,或者在建立不少类似的项目时总体架构一样是类似的,好比须要contextConfiguration.xml、Struts-Config.xml、Hibernate.xml、Properties.xml之类的文件。这些都是重复的操做,若是咱们没有maven工程就须要在每次业务中完成这些操做。java

Maven能够作的事情

  1. jar包管理
  2. 项目的结构和管理

咱们来看看百度百科对Maven的解释mysql

在这里插入图片描述

2、Maven的介绍

jar包的管理

咱们在使用Maven时应该告诉maven的一些内容:web

  1. jar包的下载地址?
  2. 下载完成以后保存在哪边?
  3. 具体下载的jar包是什么?

项目的构建和管理

  1. 在工做结构上进行一些限制和要求
  2. 至少要建立一个本身比较满意的模板
  3. 对这个模板进行复制

3、下载与安装

1. 下载

在Maven的官网https://maven.apache.org/download.cgi中下载spring

在这里插入图片描述

2. 安装

注意:在maven安装以前,必定要已经安装了jdksql

只须要将maven所在的目录的bin文件配置到Path环境变量中,这样作的目的是在命令行的任意目录下,均可以使用“maven”命令操做。apache

MAVEN_HOME类比JAVA_HOME ,把maven所在目录配置到这个MAVEN_HOME中安全

4、maven配置

maven的安装目录的conf文件夹中有一个settings.xml文件,而官网中又说在.m2文件夹下也有这样一个文件,这是一个默认文件夹,咱们并不能发现。架构

将conf中的settings.xml文件复制到.m2文件下以后完成配置。mvc

5、maven目录结构

在这里插入图片描述

  • bin目录:包含了maven运行的一些,命令脚本
  • boot目录:包含类加载器的一些东西
  • conf目录:configuration包含一些配置文件
  • lib目录:保存jar包

6、maven项目目录结构

项目目录结构,实际上指的是maven要求的项目必须的目录层次。

在这里咱们要记住一句话:约定优于配置(Convention Over Configuration)

要使用maven进行jar包管理,以及项目的构建和管理等等,就要遵循maven的规定。在咱们平时的写java项目的时候,在Eclipse/IDEA中想怎么建立就怎么建立,但在使用maven时,就不能这么为所欲为。

maven的项目结构

在这里插入图片描述

注意是resources文件,图上画错了。对不起了各位 (狗头)

7、手动建立Maven项目

用Maven执行文件

首先建立文件夹Maven,并按照上面的maven项目结构建立各类文件夹和文件。

在java文件夹中编写java程序,而且在网上找pom.xml的文件内容进行配置。

使用命令行进入到maven的工程中“Maven”,进行编译的命令是mvn.compile。

在这里插入图片描述

8、用IDEA建立一个Maven项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上过程当中具体的配置信息以我的为准

9、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标签中。

10、Maven仓库

maven把jar包自动下载下来以后,这个保存jar包的目录是由咱们本身指定的,能够本身指定这个目录存储的位置。固然它也有一个默认的位置 。

在maven构建项目的时候,它会帮助咱们把项目中所须要的一些基础的jar包下载下来,这个下载的地址就是由settings.xml文件里面的mirrors标签所指定的。

maven仓库,实际上指的就是jar包下载下来以后保存的目录。

settings.xml文件中默认的本地仓库的位置在${user.home}/.m2/repository,固然咱们能够对这个位置进行给更改:<localRepository>D://temp//repo</localRepository>(自行指定)

11、Maven配置文件值pom.xml

pom (project object model)项目对象模型,它为惟一表示该项目的文件

  1. 三个必填字段

    由groupId、artifactId、version所组成的文件就能够惟一肯定一个项目

    groupId标识项目组(一般为公司的域名)组织

    artifactId项目名称

    version版本号

    这三个标签是必填标签

  2. dependencied标签 用来配置项目中具体须要用到的jar包

  3. properties标签 用来定义pom中的一些属性

  4. bulid 指定如何构建当前项目

    source:指定了当前构建的souce目录
    plugin:指定了进行构建时使用的插件

  5. package标签 指定当前构建项目的类型,war、jar、pom

注意:pom文件时能够继承的,一个pom文件想要使用另外一个pom文件中的内容,就可使用继承的方式。

12、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包以后本地仓库中依旧会存在这个依赖)。

在这里插入图片描述

十3、Maven插件

什么是插件?

从官网中咱们能够看出:maven其实是一个依赖插件执行的框架,每一个任务都是由插件完成的。

两种插件类型:

  1. Bulid plugins 在构建时执行,须要在pom.xml文件中的<bulid>标签中进行配置
  2. 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>

十4、Maven之archetype

当咱们在完成一个项目后须要新建一个项目,而且这个项目与咱们完成的项目有些许类似的时候,咱们会将已经完成的项目中的一些内容拷贝过去。若是不适用maven,咱们须要把大量的工具类、包逐个拷贝。但若是咱们使用maven后,能够将这些内容封装在archetype中直接拷贝,这就方便了咱们的操做。

对于maven自己来讲,它会帮咱们已经定义好一些archetype(脚手架),这些archetype时咱们开发中经常使用的一些项目模板,当咱们新建maven项目的时候,只须要选择对应的archetype便可。

在这里插入图片描述

可是有时官方提供的东西不符合我的定制化的须要,因此咱们能够本身定义一套archetype。

在这里插入图片描述

  1. 在pom.xml文件中定义一个插件

    <build>
    	<plugins>
    	<plugin>
    		<groupId>org.apache.maven.plugins</groupId>
    		<artifactId>maven-archetype-plugin</artifactId>
    		<version>2.5</version>
    	</plugin>
    	</plugins>
    </build>
  2. 在pom.xml文件所在的目录使用mvn archetype:generate

    先在命令行中用mvn archetype:create-form-project命令建立出target文件夹。

  3. 在target目录中会生成一个自定义的骨架。

    在target中有一个generate-sources文件夹,在这个文件夹里就存放着archetype(脚手架)文件夹。

  4. 在本地安装一下这个archetype

    mvn install

    就把刚才的archetype安装到了本地。

十5、搭建Maven私服

在这里插入图片描述

在咱们须要在项目中导入jar包的时候,若是使用的是国外的镜像,那么下载速度比较慢。若是使用的是阿里云之类的国内镜像速度还算能够。可是假如网速很差的状况下也是比较慢的。又若是在没有网的状况下就没法下载。

对于以上出现的状况,咱们应该有这样的疑问:在团队开发的时候,是否是每一个人在本身本地仓库都须要下载一份?能不能你们公用一份?

为了解决这个问题,咱们就引入了maven私服。

假如当咱们某个maven项目须要一份jar包的时候(假如就是mysql-connection.jar),先看一下本地仓库中是否有这个jar包(版本也要判断),若是有,则不下载。若是没有,则去下载,而且保存到本地仓库中,若是之后须要就不须要下载了。在项目中进行开发的时候,仅仅就是将本地仓库的jar包导入到工程里面便可,不再用像传统原始方式那样,每一个项目厚葬都须要有单独一个jar包,这样就不会形成jar包的冗余。
在这里插入图片描述

十6、Maven聚合项目

在以前提到的建立maven项目时,新建的都是单一的maven。

而在业务开发中咱们不少状况下都要用到聚合项目——多module的maven项目。

Maven实际上能够有一个父项目,父项目下能够有不少子项目。

在这里插入图片描述

这里的Spring就是父项目,而其下的springmvc和springjdbc就是子项目。

方法:在建立完Spring的maven项目以后,删除掉main文件夹,再在Spring下建立springmvc和springjdbc的maven项目。