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

一、倘若没有 maven

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

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

在这些业务创建时需要导入很多jar包,或者在创建很多相似的项目时整体架构同样是相似的,比如需要contextConfiguration.xml、Struts-Config.xml、Hibernate.xml、Properties.xml之类的文件。这些都是重复的操作,如果我们没有maven工程就需要在每次业务中完成这些操作。

Maven可以做的事情
  1. jar包管理
  2. 项目的结构和管理

我们来看看百度百科对Maven的解释

在这里插入图片描述

二、Maven的介绍

jar包的管理

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

  1. jar包的下载地址?
  2. 下载完成之后保存在哪边?
  3. 具体下载的jar包是什么?
项目的构建和管理
  1. 在工作结构上进行一些限制和要求
  2. 至少要创建一个自己比较满意的模板
  3. 对这个模板进行复制
三、下载与安装
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)项目对象模型,它为唯一表示该项目的文件

  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文件中的内容,就可以使用继承的方式。

十二、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实际上是一个依赖插件执行的框架,每个任务都是由插件完成的。

两种插件类型:

  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>
十四、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安装到了本地。

十五、搭建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项目。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值