Maven总结
学习目标: Maven简介、Maven仓库、Maven的安装和配置、Maven的使用
1.何为Maven
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、依赖管理和项目信息管理。
2.Maven是优秀的构建工具
自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。是跨平台的,无论是Windows上,还是Linux或Mac上,都使用相同命令。
3.Maven不仅仅是构建工具,也是依赖管理工具、项目信息管理工具。
4.Maven仓库
Maven仓库就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖JAR。
Maven仓库分类
5.Maven仓库——中央仓库
查询中央仓库地址 http://search.maven.org
6.Maven仓库——私服
私服地址 http://10.10.8.201:8081/nexus/index.html
私服:一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。
私服优点:节省自己的外网带宽、加速Maven构建、部署第三方构件、提高稳定性,增强控制、降低中央仓库的负荷。
工作当中要用的地址:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
7.Maven安装和配置
1.从http://maven.apache.org/download.html下载最新的maven,解压到指定目录。
2.配置环境变量
3.控制台中执行mvn–v测试是否配置成功
出现如下字样:
4.添加需要使用的Maven位置【安装——环境准备】
5.设置用户settings.xml文件
8.Maven使用:新建一个Maven支持的web项目,选择maven-archetype-webbapp模板。
9. Maven项目目录
10. Maven使用
1. 新建一个Maven支持的web项目,选择 maven-archetype-webbapp模板。
2.检查项目的编码是否是utf-8,检查项目使用的jdk版本。
3.修改项目基本信息。
4.配置项目的自定义属性及项目依赖。
10.2项目基本信息
modelVersion:当前POM模型版本,对于Maven3必须为4.0.0。
groupId:定义当前项目隶属的实际项目。
artifact:定义实际项目中的一个Maven项目(模块)。
version:定义Maven项目当前所处版本。
packaging:定义Maven项目打包方式。默认为jar。
classifier:定义构建输出的一些附属构件。生成javadoc等。由 插件自动生成,不能直接定义。
坐标:groupId:artifact:version:packaging
构件名称:artifact-version[-classifier].packaging
10.3 依赖范围
compile(编译范围) compile是默认的范围,会被打包。
provided(已提供范围) provided依赖只有在当JDK或者 一个容器已提供该依赖之后才使用。它们不是传递性的,也不会被打包。
runtime(运行时范围) runtime依赖在运行和测试系统的 时候需要,但在编译的时候不需要。
test(测试范围)只有在测试编译和测试运行阶段可用。
system(系统范围)必须显式的提供一个对于本地系统中JAR文件的路径。注意该范围是不推荐使用。
11. Maven使用后续工作
进行项目测试、打包。命令:mvn clean deploy
发布版本。
命令: mvn release:prepare 准备发布
mvn release:rollback 回退release:prepare操作
mvn release:perform 执行版本发布
12.Maven常用命令
mvn archetype:generate :创建 Maven项目
mvn compile :编译源代码
mvn package : 依据项目生成 jar文件
mvn install :在本地 Repository中安装 jar
mvn deploy:将jar包发布到远程仓库
mvn eclipse:eclipse :生成 Eclipse项目文件
13.项目开发阶段
1创建项目
项目类型 1 javase项目2 javaee项目
2编码阶段
编码+添加依赖jar包+TOMCAT配置
3编译项目
jdk的javac
4运行项目(找到项目的main方法)
jdk的java命令
5打包发布
14.maven融合了四个阶段(控制依赖jar仓库)
<dependency>
<groupId>公司名(cn.easytop)</groupId>
<artifactId>项目名</artifactId>
<version>版本号</version>
</dependency>
SNAPSHOT(开发阶段(不稳定))
RELEASE (发布阶段(稳定))
15. 学习命令是作为开发工具的基础,这样会很容易上手。
16. Maven原理图
第二部分 maven的深入
1. pom.xml决定了这个项目的类型 这个文件是整个maven项目的灵魂。
插件的理解:表示在maven构建中执行的jar名称 插件名 -maven-plugin命名,可以通过jar包中plugins.xml中找到所有的配置定义
插件:其实就是临时加上去的东西,比如游戏的外挂。
2.<scope>system</scope>作用
介绍 scope各个值的参考
compile:默认的scope。任何定义在compile scope下的依赖将会在所有的class paths下可用。maven工程会将其打包到最终的arifact中。如果你构建一个WAR类型的artefact,那么在compile scope下引用的JAR文件将会被集成到WAR文件内。
provided:这个scope假定对应的依赖会由运行这个应用的JDK或者容器来提供。最好的例子就是servlet API。任何在provided scope下定义的依赖在构建时的类路径里是可用的,但是不会被打包到最终的artifact中。如果是一个WAR的文件,servlet API在构建时的类路径里是可用的,但是并不会被打包到WAR文件中。
runtime:在runtime scope下定义的依赖只会在运行期可用,而在构建期的类路径下不可用。这些依赖将会被打包到最终的artifact中。比如你有一个基于web的应用需要在运行时访问MySQL数据库。你的代码没有任何MySQL数据库驱动的硬依赖。你的代码仅仅是基于JDBC API来编写,在构建期并不需要MySQL数据库驱动。然而,在运行期,就需要相应的驱动来操作MySQL数据库了。因此,这个驱动应该被打包到最终的artifact中。
test:只用于测试变异的依赖(比如JUnit),execution必须定义在test scope下。这些依赖不会被打包到最终的artefact中。
system:于provided scope很像。唯一的区别在于,在system scope中,你需要告诉Mave如何去找到这个依赖。如果你要引用的依赖在Maven仓库中不存在时,就可以用这个scope。不推荐使用system依赖。
import:从其它的pom文件中导入依赖设置。
3.<!-- 依赖 当前的项目依赖那些jar -->
与它相关的所有jar包,全部下载下来
4.端口号 字符集(解决乱码问题)
maven插件 表示在maven构建构成中执行的jar名称 插件名-maven-plugin命名
可以通过 jar包中plugins中找到所有的配置定义
5.项目的关系继承:
在创建项目时,选中pom类型,就是父类型。
特点:
只要是在《dependencies》中依赖的jar包,一定会出现在子类中,适合项目开发,而在《dependencyManagement》中出现的,在其子类中可以不出现,可以通过《parent》来找到父类,并通过《dependencies》来选择父类中出现的jar包,适合框架开发。