Maven入门与使用
Maven
项目对象对象模型:POM
(主要用于解决项目依赖的问题)
项目分类
Java项目--》jar包 作为开发时的依赖包
web项目--》war包 放到tomcat上运行
项目中遇到的问题(使用Maven来解决)
项目构建:编译--》运行测试--》打包--》部署--》运行服务器等一系列操作,每个过程都非常的繁琐;
项目依赖:随着项目的扩展增大,第三方工具包越来越多,第三方包又依赖于其他的包,维护依赖和管理依赖需要耗费很大的精力!
Maven简介
(使用Java编写,只能管理Java项目)
Maven是一个跨平台的项目管理工具,可以管理仙姑生命周期中的构建(编译,运行,测试,打包,部署等)和项目项目的依赖(jar包),以及管理项目各个模块之间的依赖关系!
Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。
开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。
使用Maven的好处:
1,Maven能够提供一种项目的配置,配置好的项目,只需要一条简单的命令,就可以完成重复的,繁琐的构建动作;
2,Maven能够提供一种项目的依赖配置,可以自动的导入项目所依赖的jar,并且自动的导入这些jar包所依赖的第三方的jar包;
3,Maven提供了一种标准的项目的目录结构,测试命名规则等项目的最佳实践方案,统一了不同项目的学习成本;
Maven的入门
1、Maven的安装
(1) 检查JDK安装的情况(需要1.6以上的版本):
添加JAVA_HOME,需要指向JDK安装目录;
添加PATH,添加%JAVA_HOME%\BIN;
(2)Maven的下载
http://maven.apache.org/download.cgi
(3)apache-maven-3.6.1-bin.zip解压到目录中(目录路径最好不要有空格和中文)
目录介绍
bin:存放执行脚本文件的地方
boot:存放一些扩展的地方,类加载的文件
conf:maven的核心配置文件存放的路径
lib:maven的依赖包
(4)设置系统环境变量,MAVEN_HOME,指向maven的根目录
设置环境变量Path,将%MAVEN_HOME%\bin加入Path中;
(5)验证Maven安装
打开cmd窗口,敲入mvn –v(mvn -version) 查看
2、Maven工程的目录结构
Maven规定了一套标准的目录结构,在使用的过程中要严格的遵守这套规定;
Hello 项目的名称
src 所有的源码都在放在这里面
main 存放运行文件
java 存放Java源文件
resources 资源文件如配置文件等
webapp 存放JSP CSS image (主要用于web项目)
test 存放测试用文件
java 测试文件的源文件
resources 测试文件的资源文件
pom.xml Maven工程的配置文件(主配置文件)
target Maven自动输出的文件路径
3、Maven工程中的配置文件(pom.xml)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- 模板版本,目前使用的都是这个版本,不用改动 -->
<modelVersion>4.0.0</modelVersion>
<!-- 坐标:用于唯一标识当前项目在本地仓库中的位置 -->
<!--
groupId:组ID,当前项目所属的公司,组织,机构,公司或者域名的倒置;
artifactId:项目的名字(大项目的时候的也可以是子模块的名字);
version:版本号,一般的命名规范:x.x.x;
由于坐标是唯一的标识,不要随意的改动;
-->
<groupId>com.ujiuye</groupId>
<artifactId>MyProject</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<!--
name为项目的名称
URL为Maven的官网地址(可以修改为个人的地址)
-->
<name>MyProject</name>
<url>http://maven.apache.org</url>
<!--
配置文件
这里配置的是源文件的编码格式
-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- (很重要)
dependencies为整个项目所用到的非本地库中的jar包的全部的依赖包
通过坐标的方式,索引到(关联到)对应的jar包;
其中scope为范围:一共有五种
compile(编译,测试,运行)
provided(编译,测试【不参与运行】)
runtime
system
test(仅仅用于测试)
-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
4、Maven执行的命令
(1)mvn compile 命令 会编译生成对应的字节码文件
(2)mvn clean 命令 会清除已经生成的字节码文件
(3)mvn clean compile 会先清除已经产生的字节码文件,然后再重新编译生成字节码文件
(4)mvn test 会执行test包中的测试类
(5)mvn package 把工程打成相应的包,Java项目打成jar包,web项目打成war包
(6)mvn clean site 生成项目相关的帮助文档网页
(7)mvn install 将项目打成相应的包安装到本地上
5、Maven仓库的配置
仓库类型
本地仓库
相当于缓存,在电脑中为一个文件夹.
工程第一次会从远程仓库(互联网)去下载jar 包,将jar包存在本地仓库(在程序员的电脑上)。
第二次不需要从远程仓库去下载。先从本地库找,如果找不到才会再去远程仓库找。
远程仓库
中央仓库
仓库中的jar包由专业团队(maven团队)统一维护。
存放了全世界大多数流行开源软件jar包.为Maven默认的远程仓库.
私服
公司内部架设一台服务器,存放所有需要的jar包,对外公开,供终端进行下载.(如阿里云的Maven服务器)
6、本地仓库的配置
在Maven的安装路径下,config文件夹中,修改setting.xml文件,配置localRepository
<!--
localRepository
本地存储库maven的路径将用于存储工件。
The path to the local repository maven will use to store artifacts.
默认的本地仓库的地址在 .m2/repository目录下;
Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
7、配置远程仓库
Maven默认的远程仓库(中央仓库),受网络的影响,不够便捷,于是可以使用国内的阿里云的Maven仓库作为中央仓库的镜像;
配置setting.xml文件中的mirrors标签;
<mirrors>
<!-- mirror
指定要使用的存储库镜像站点,而不是指定的存储库。存储库
此镜像服务具有与此镜像的mirror of元素匹配的ID。使用ID
为了继承和直接查找的目的,并且在镜像集之间必须是唯一的。
Specifies a repository mirror site to use instead of a given repository. The repository that
this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
<mirror>
<id>mirrorId</id>当前镜像的唯一标识的ID
<mirrorOf>repositoryId</mirrorOf>为哪个远程仓库做的镜像,因为中央仓库的ID为central,所以为为中央仓库做镜像时其值必须为central
<name>Human Readable Name for this Mirror.</name>当前镜像的名字,主要的目的是便于开发者阅读
<url>http://my.repository.com/repo/path</url>远程镜像的地址
</mirror>
--></mirrors>
阿里云的远程仓库
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
8、把Maven整合到eclipse中
首先在eclipse中添加Maven组件
window-->preference-->maven-->add,添加本地安装的Maven【eclipse会有自带的Maven,不建议使用】
注意:在选择user setting的时候,会使用默认的安装目录下的配置文件
创建Java项目
选择File--->New--->Project--->Maven Project,选择,Next,选中maven-archetype-quickstart,点击Next;
需要录入前三项(必选项)【使用这三项来创建一个唯一的标识】
groupId(组ID)
artifactId(项目名ID)
version(项目版本号)
其他选项可以留空不写;
创建web项目
选择File--->New--->Project--->Maven Project,选择,Next,选中maven-archetype-webapp,点击Next;
需要录入前三项(必选项)【使用这三项来创建一个唯一的标识】
groupId(组ID)
artifactId(项目名ID)
version(项目版本号)
其他选项可以留空不写;
【特别注意:使用模板骨架创建出来的项目不是标准的Maven项目,需要自己补全resources文件夹】
创建项目的时候也可以不选择模板骨架
跳过骨架的选择创建,项目需要在点击Maven Project之后的对话框中勾选Create a simple project.
需要录入groupId,artifactId和version外,
还需要选择packaing打包方式.
如果是java项目则选择jar,
如果创建的是web项目则选择war.
在web项目中main文件夹下会有一个webapp文件夹
该文件存放的web静态资源如(js文件,image,jsp,HTML等),
9、运行Maven命令
可以在项目上直接右键直接选择run as或者是debug as,选择对应的命令;
如果在列出的命令中没有要运行的命令,如:package,可以使用Maven build...这个选项,
在goals文本框中直接输入Maven的命令,这时候的命令全部不需要加前缀mvn,直接输入package就可以!
10、Maven管理依赖和插件
添加Maven依赖
修改项目的pom.xml文件在dependencies中添加要加入的依赖,在编译时Maven会自动的寻找对应的本地中的依赖环境,
如果本地没有相关的依赖,就会从配置的远程仓库中进行下载;
<dependencies>
<dependency>
<!-- 依赖的坐标 -->
<groupId>junit</groupId> 组ID
<artifactId>junit</artifactId> 项目名ID
<version>4.12</version> 版本号
<scope>test</scope> 依赖的作用范围
</dependency>
</dependencies>
scope有几个可选值, 如:
1、compile: 默认值,表示编译依赖范围。即编译、测试、运行时都需要,会被打包。(默认值compile表明该jar一直全程存在/需要)
2、test:表示测试依赖范围。即测试时需要,编译和运行时不需要,不会被打包。比如:junit。
3、provided:表示已提供依赖范围。即编译、测试时需要,运行时不需要,不会被打包。比如:servlet-api和jsp-api被tomcat容器提供。
服务器本身会提供这些jar,避免和服务器上的这些包冲突
4、runtime:表示运行时提供依赖范围。即编译时不需要,运行和测试时需要,会被打包。比如:jstl、jdbc驱动。
5、system:system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径,
需要指定systemPath磁盘路径,system依赖不推荐使用。
附录:当我们想使用一个依赖却不知道其对应的坐标,可以从Apache的官网上查询;
查询地址:[依赖查询地址](https://mvnrepository.com/)
查询以后,点击对应的链接,copy给出的ID,粘贴到pom.xml的配置文件的dependencies中即可!
要注意自己要使用的版本,在不知道的情况下选择使用最多的下载;