1 倘若没有maven
新建了一个项目,然后项目中写了一些代码
需求:需要大家写一段jdbc代码,去读取某张表中的数据
一定少不了的东西是要mysql的驱动包
需求:请你用spring去开发一个简单的crud
有一种困惑?
很烦,当你在做不同的项目的时候,你都需要导入一些基本的重复的jar包
/*
Spring 基本开发的时候,需要的jar包是
*/
Maven可以做的事情
jar包管理
Com.gupao.dao
Com.gupao.service
Com.gupao.web
Com.gupao.util
contextConfiguration.xml
Struts-config.xml
Hibernate-cfg.xml
Properties.xml
项目的构建和管理
2 maven介绍
3 maven初体验
正常使用maven有两种形式,一种是命令行形式(手动创建maven项目),另外一种是集成开发工具创建maven项目。
因为手动创建过程比较麻烦一点,我担心大家听的时候会觉得枯燥。
带大家使用一下maven的感觉。Maven怎么去进行jar包管理的,或者是怎样去进行项目的构建和管理的。
MyEclipse Idea
Cmd javac java
4 maven官网
大家在学习一门新的技术的时候,会不会想找最官网最权威的答案?
只有学会看官网,你才能得到最完善最牛逼的答案。
maven官网:http://maven.apache.org/
其实英文文档并没有那么难,只要你多看多理解,也就是那么回事,而且在英文官网文档中你可以学习到最权威的知识。
5 maven下载与安装
jar包管理,以及项目构建与管理的。
用一用maven,怎么用?
(1)下载 download
System Requirements
(2)安装
注意:在maven安装之前,一定要已经安装了jdk。
只需要将maven所在的目录的bin文件夹配置到Path环境变量中,这样做的目的是在命令行的任意目录下,都可以使用“mvn”命令来操作。
MAVEN_HOME类比JAVA_HOME 把maven所在的目录配置到这个MAVEN_HOME中
6 maven配置
查看maven的版本信息:mvn -version
那maven我到底该怎么用?如何去用?如何进行jar包项目的管理等等?
mvn [options] [<goal(s)>] [<phase(s)>]
mvn命令有一个更好的理解,就是不要觉得太突兀 mvn -v mvn package javac Person.java java Person
maven的安装目录的conf文件夹中有一个settings.xml文件,而官网中又说在.m2文件夹下也有这样一个文件,但是我们没有发现,原因是?
将conf中的settings.xml文件复制到.m2文件夹下之后,会不会有冲突?也就是说,当两边都存在settings.xml文件的时候,我们以哪个为准?
7 maven目录结构
bin目录:包含了maven运行的一些命令脚本
boot目录:包含的是类加载器的一些东西
conf目录:configuration配置的,保存一些配置文件的
lib目录:保存jar包的
原因是希望大家对maven目录结构有一个整体的认知,至少知道maven各个文件夹是干什么的,这样接下来学习maven的时候你才会不慌
8 maven项目目录结构
项目目录结构,实际上指的是maven要求你的项目必须的一个目录层次。
约定优于配置 (Convention Over Configuration)
要去使用maven帮你进行jar包的管理,以及项目的构建和管理等等,你就要遵循maven的规定/约定
maven要求的你的工程结构必须是哪样哪样的。
MyEclipse/IDEA 中想怎么建就怎么建,这边放这个,这边放那个。
有了maven之后,你就不能那么随心所欲的。
9 手动创建maven项目
按照之前的图解,我们手动创建了maven项目,那其实target目录还是没有的,怎么呢?
需求:我想要在命令行中打印出一句话,比如叫做hello gupao maven!
传统的方式
Maven的做法
(1)使用命令行进入到maven的工程中“GupaoMaven”
mvn compile 对maven项目进行编译
(2)target目录是项目输出的一个目录,这个输出现在应该多少有点感觉了
10 开发工具创建maven项目
其实无论是myeclipse还是idea里面都集成了maven,默认安装了maven
maven默认帮你写好了一些项目的目录结构
创建一个简单的maven项目必备的内容
com.gupao.maven
11 maven配置文件之settings.xml
该文件是maven的全局配置文件 -web项目中的web.xml
(1)mirrors标签,表示配置镜像所在的路径的
默认的地址是国外的:https://repo.maven.apache...,maven要帮你管理jar,这些jar包下载的地址是从该地址下的,当然这个下载地址可以改变,就是通过mirrors标签。
- <mirror>
- <id>alimaven</id>
- <name>aliyun maven</name>
- <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
- <mirrorOf>central</mirrorOf>
- </mirror>
将这段话配置到mirrors标签对中即可。
一方面国外镜像的地址下载速度比较慢,所以可以考虑国内镜像的地址,比如阿里云的。
(1)localRepository
(2)interactiveMode 标识maven是否需要和用户交互以获得输入
如果maven需要和用户交互以获得输入,那么则设置成true,不然则设置为false
(3)offline
标识maven是否需要在离线模式下运行
(4)pluginGroups
当插件的组织id(groupId)没有显示提供时,供搜寻插件组织Id的列表
(5)proxies
用来配置不同的代理的
(7)servers
仓库的下载和部署是在pom.xml文件中进行定义的。比如说用户名,密码需要访问远程仓库的时候,有时候需要安全认证,这个认证就可以配置在servers标签中
(8)profiles
根据环境参数来调整构建配置的列表
12 maven仓库
maven把jar包自动下载下来之后,这个保存jar包的目录是由我们自己指定,你自己可以指定这个目录存储的位置,当然,它也有一个默认的位置。
补充:在maven构建项目的时候,它会帮我们把项目中所需要的一些基础的jar包下载下来,这个下载的地址就是由settings.xml文件里面的mirror标签所指定的。
maven仓库,实际上指的就是jar包下载下来之后保存的目录。
maven仓库保存在自己电脑中的叫做本地仓库,localRepository的含义本地仓库。
<localRepository>E://temp//myrepo</localRepository> 自己指定了一个本地maven仓库所在的地址,而不是之前默认的当前用户的.m2下面的repository文件夹了。
剧透:如果一个jar包已经在本地仓库中有了,注意这个jar包版本一定是要一致的才算有了,如果版本不一致,不能算作有,比如3.8.1 3.8.2
其他如果有了,那么就不会再次去重复下载。
优势:可以节约本地的一个空间存储。
13 maven配置文件之pom.xml
pom project object model 项目对象模型,它为唯一标识该项目的
(1)3个必填字段
由groupId artifactId version所组成的就可以唯一确定一个项目
groupId标识的项目组(填写公司的域名) 组织
artifactId项目名称
version版本号
上面的三个标签是必填标签
(2)pom里面还有会dependencies标签,这个标签就是用来配置我们项目中具体需要哪些jar包
(3)properties标签,用来定义pom中的一些属性的
(4)build 指定如何构建当前项目的
source: 指定了当前构建的source目录
plugin: 指定了进行构建时使用的插件
(5)packging 指定当前构建项目的类型,war jar pom
补充:pom文件是可以继承的,超级pom文件等等。
比如一定pom文件中定义了一些东西,另外一个pom文件也想要使用,这时候就可以使用继承的方式。
14 maven依赖
dependencies标签,里面可以包含很多的dependency标签
http://mvnrepository.com/ maven项目中要想下载指定的jar包,实际上就是在pom.xml文件的dependencies标签对中进行配置,那这个dependency怎么写?具体就是在这个网址中进行搜索。
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
比如上面这段配置的确可以下载具体的jar包,怎么去验证它会下载下来呢?
不仅可以把当前指定的jar包下载下来,而且它所依赖的其他包也会自动下载下来。
maven比如已经下载过的jar包,还会再下载吗?
如果已经下载过的jar包,maven不会帮我们再次下载(前提是maven仓库是同一个目录,如果换了目录,它还是会重新下载的),而且对于不同的版本的同一个jar包,maven默认它是不同的jar包。
15 maven插件
什么是maven插件?
maven实际上是一个依赖插件执行的框架,每个人物都是由插件完成的。
两种插件类型:
Build plugins 在构建时执行,需要在pom.xml文件中进行配置
<build>
reporting plugins 在网站生成过程中执行,也需要在pom.xml文件中进行配置
<reporting>
常用的插件列表
clean 项目构建之后用于清理项目的
compiler 编译java源代码的
jar 构建jar文件的
war 构建war文件的
tomcat ....
16 maven之archetype
maven本身来说,它会帮我们已经定义好一些archetype,这些archetype是我们开发中常用的一些项目模板,你新建maven项目的时候,只需要选择对应的archetype即可。
但是往往是官方提供的东西虽然好,不是太符合个人定制化的需要。
大家自己可能有一套自己觉得比较满意的archetype,所以往往我们会自定义自己的archetype。
(1)在pom.xml文件中定义一个插件
(2)在pom.xml文件所在的目录使用mvn archetype:generate
(3)在target目录中会生成一个自定义的骨架
(1)在本地安装一下这个archetype
mvn install
就把刚才的archetype安装到了本地
17 搭建maven私服
如果使用的是国外镜像,那么下载速度比较慢
如果使用的是阿里云镜像,速度还算ok,但是假如网速不好的时候,其实也是比较慢的
如果没有网的情况下更加下载不了
团队开发的时候,是不是每个人在自己的本地仓库都需要下载一份呢?
能不能大家共用一份呢?
当我们某个maven项目需要一份jar包的时候,mysql-connector.jar
先看一下你本地仓库是否有这样jar包(版本也要判断),如果有,则不下载
如果没有,则去下载,并且保存到本地仓库中,然后以后需要的话,就不需要下载了
在项目中进行开发的时候,仅仅就是将本地仓库的jar包导入到工程里面即可,再也不用
像传统原始方式那样,每个项目中都要一份单独的jar包,这样会造成jar包的冗余。
写好一个web资源(HTML页面)想要供外界去访问,你会在服务器上装一个web服务器比如tomcat服务器
18 maven项目实战
如果说你使用的maven自定义的archetype发现里面的工程目录结构并不是严格按照maven所要求的,这时候你需要把缺少的目录补全
需求:使用maven项目搭建一个springmvc的简单流程
(1)新建一个maven工程
(2)根据你需要创建的项目类型,导入你需要的jar包
根据dependency标签去导入jar包,并不是太难的一个过程,很方便
(3)web.xml文件
(4)springmvc-serlvet.xml
师傅领进门,修行靠个人 ------from gupao