什么是maven
maven是一个java平台下的的软件项目管理和综合工具,由Apache组织中开发维护,基于项目对象模型的概念,maven可以根据一个中心信息来管理项目的构建,文档和报告
为何需要maven
在日常开发工作中,开发者需要自行管理项目依赖,频繁的编译,清理,测试,打包,发布等等…虽然IDE都提供了相应的支持,但也免不了我们需要,花很多时间进行这些重复且没有技术含量的工作,我们将上述这些过程统称为项目构建。
Maven的出现正是为了将开发者从繁杂的项目构建中解放出来
Maven的作用
1、使得构建项目过程变得更简单,Maven不会消除对底层机制的了解,没有太过高级的封装,但可以让你免受许多细节的影响
2、提供了统一的构建系统,Maven使用其项目对象模型(POM)和一组插件来构建项目,一旦熟悉了一个Maven项目,就知道所有Maven项目是如何构建的
3、提供了项目质量信息,这些信息部分来自POM,部分来自项目源代码,如:项目使用的依赖项,单元测试报告(包括覆盖率),交叉引用等
4、鼓励更好的开发实践,Maven收集了当前的最佳开发实践,并轻松地朝该方向指导项目。例如:单元测试的规范化
Maven相关概念
POM(项目对象模型)
maven整体采用的就是POM,既将项目看做一个对象,我们可以对这个项目对象进行相关属性的设置,从而来完成项目的管理
一个POM可继承其他POM从而使用其中已经定义好的内容;
可将一个Maven项目拆分为多个不同Maven模块,只需要在POM中列出包含的模块信息即可;
repository(仓库)
所有Maven项目都具备自己的坐标,包括组织ID,坐标ID和版本号,有了坐标后,可将项目放入仓库中,以供其他人使用,仓库就是用来存放这些项目的地方,分为本地仓库,和远程仓库,以及中央仓库
中央仓库也属于远程仓库,是有maven官方维护的仓库,是最完整的jar仓库,为了区别于其他仓库,所以称之为中央仓库
Dependency Management(依赖管理)
依赖指得是项目运行所必须的组件(可以是jar,java,class),依赖管理是Maven提供的最核心的功能之一,可根据提供的项目坐标,自动的从仓库中下载需要的依赖,并且会帮助我们解决依赖冲突问题
Project Lifecycle(项目生命周期)
项目生命周期指得是项目从创建工程开始到最终部署到服务器的所有动作的总称,如编译,测试,打包,部署,生成项目站点等…
Maven对这些动作进行了抽象,变成了一个个生命周期
生命周期
生命周期动作本质都是通过插件来完成的,所以Maven项目默认就存在与生命周期相关的几个插件,具体如下:
三个生命周期:
默认(default)的生命周期,处理从验证开始执行所有阶段一直到部署
清洁(clean)生命周期,处理项目的清理操作
站点(site)生命周期,处理项目站点的创建和部署
阶段
每个生命周期下包含若干个阶段,以下列出重要阶段(不区分周期):
安装与配置
下载地址:https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/
正常使用下载binary二进制版本,如上图,需要查看源码则下载源码
源码地址:https://archive.apache.org/dist/maven/maven-3/3.6.1/source/
下载后直接解压即可,CMD中使用需设置环境变量,Maven不区分版本,bin下提供了用于unix的sh和用于windows的cmd文件,将bin添加至环境变量即可,因为我使用ide所以就不再叙述:
maven结构:
bin:编译好的可执行文件。
conf:配置文件
lib:依赖包
repository:本地仓库,需要自己建,并将conf文件夹下的settings.xml复制到该文件夹下。
IDEA中已经集成了Maven,无需额外安装,也不需要任何的命令
在这里我会进行配置刚刚下载的的maven,进行演示如何配置
IDEA下配置Maven
在IDEA中我们可以自定义本地仓库路径和配置文件,在File -> Settings 中搜索Maven,可打开如下界面:
如要配置:
在图中标记处,第一个是选择我们下的maven解压后的文件目录;
第二个是选择配置文件,选中Override,就可以进行修改,找到maven目录/conf下的settings.xml或repository下粘贴过去的settings.xml都可,但是两个文件要一致
第三个选择仓库地址,也就是我们创建的repository文件夹
设置settings.xml文件:
在<mirrors>
里添加:
<mirror>
<id>nexus-aliyun</id>
<name>nexus-aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
这是设置中央仓库为阿里云镜像,原因是maven中央仓库是国外的,所以我们使用的时候会很慢,所以我们换成了国内的阿里云,还有其他的,可以自行百度。
在<profiles>
里添加:
<profile>
<id>jdk-1.8</id>
<activation> <!-- 配置激活条件 -->
<activeByDefault>true</activeByDefault> <!-- 是否是默认配置 -->
<jdk>[1.8,)</jdk> <!-- 当jdk版本 <=1.8时配置生效 -->
</activation>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</profile>
这个视你的jdk版本来定,如果你的jdk和idea版本高的话,它默认的jdk太低,而报错,这个也可以在pom.xml设置,但是那样只对那个有用,新建还要配置,这个是如果你的jdk大于等于1.8,就起作用,默认为1.8。
maven项目的创建
点击Creat New Project 选择 maven 如下
点击next->出现以下界面:
GroupId:小组ID,一般是公司域名反写,如:www.lbb
ArtifactId: 项目Id,项目名
Version:版本号
点击next,会让你配置maven,如果第一次可能需要配置,和上面一样就行了
点击next,会让你检查,
点击fish完成,这时候就完成创建了
这时右下角会出现
点击自动导入就可以了,这时项目结构是不完整的,进行以下操作:
点击项目配置:
鼠标在上层文件夹,右键,选择new folder , 创建以上文件夹src下有以下文件夹,结构如下:
main:
java:存放Java代码
resources:存放配置资源文件,如 xml文件
webapp:存放页面,静态资源
test
java:存放java测试代码
点击ok,项目结构就基本完善了,如下:
至此还有一个小问题在于:web.xml,从骨架创建的web.xml配置不是很全,下面是web.xml配置,也可以在本地文件一次性修改文件,可以自行百度:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
</web-app>
pom.xml
Maven项目的运行与普通项目没有太大的区别,不过我们还可以通过Maven插件来运行web项目,tomcat和一些常见服务器都有Maven插件,都是在pom.xml配置好的,插件配置如下:
<build>
<!--最后打包时文件名-->
<finalName>mavenDemo</finalName>
<!-- 插件-->
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
项目配置信息:
<groupId>com.lbb</groupId>
<artifactId>mavenDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 打包方式 -->
<packaging>war</packaging>
<!--jdk版本以及编码方式-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
jar包以及依赖:
<dependencies>
<!--可添加多个依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
对于依赖包,我们可以去阿里仓库或这maven中央仓库去搜索,下面时阿里仓库搜索:
将上面的内容添加到pom.xml里<dependencies>
下就可以了,当加载后会出现下图标记4的样式:
标记1:重新导入项目依赖
标记2:构建源码和更新文件
标记3:下载源码
maven项目具体使用就和web一样使用就可以了