这里写目录标题
一、什么是maven?
Apache Maven 是一种用于软件项目管理工具,基于 Project Object Model(POM),用来管理项目的构建,汇报及文档生成等功能。
我们知道了maven是一种项目管理工具之后,最主要的还是使用它,那么通过maven创建项目的详细步骤又是什么呢?我在另一篇博客中已经详细写出: IntelliJ IDEA中创建一个Maven项目以及对maven的设置.
maven的作用:
maven 的目标是完成项目构建解决的一切繁琐事宜。它的主要作用有:
- 提供一个标准的项目工程目录
- 提供项目描述
- 提供强大的版本管理工具
- 可以分阶段的进行构建过程
- 提供了丰富的插件库使用
二、maven项目的基本结构
创建好maven项目之后,我们来看看maven项目的基本结构,通过上面的博客,我们创建好的maven项目结构如下图所示:
- src\main\java: Java代码的根路径,这个文件夹下就可以写我们的servlet代码
- src\main\resources: 一般是用于同时部署的一些资源文件,例如图片、音频、视频等
- src\test\java: 一般用来放一些测试代码
- pom.xml: 是 maven 最重要的文件,是 maven 的配置描述文件,用来配置一些项目的描述信息或者是项目中所需要的依赖文件。
- target: maven项目默认的编译路径
- clasess: src/main/javaz中的类编译为class文件;src/main/resources复制过来;
- test-classess: src/test/java中的类编译为class文件:src/test/resources复制过来;
更加细分见下图所示:
三、maven的配置文件
1、全局配置文件(settings.xml)
settings.xml:是指定本地仓库,指定远程仓库
1)settings.xml文件位置
settings.xml文件会在两个目录下存在:
1、Maven安装目录(全局):%MAVEN_HOME%\conf\settings.xml;
也就是我们在哪安装的,安装的目录的conf文件夹下就会有一个settings.xml文件;比如我自己就在D盘的某个路径下,如下图所示:
2、用户安装目录(系统中指定的用户目录,一般在C盘下):${user.home}.m2\settings.xml
如下图实我自己电脑上系统的用户目录:
注意:
如果两个目录都有settings.xml文件,那么系统分配的用户目录(也就是C盘中的)占主导地位
但是我们一般建议在项目中使用自己指定的本地目录
,因为:
- 如果指定了settings.xml的位置,本地仓库的位置就随着它一块变(比如我是用的是我自己指定的D盘中的settings.xml,那么maven仓库的位置也就跟着变为D盘中的仓库,而不会是C盘的)。
- 并且我们在项目中使用的一些依赖都会下载到maven仓库,如果放在C盘会占据C盘的空间(C盘一般不建议放一些用户自己的东西)
2)指定本地仓库
打开settings.xml,如下图所示,在标签中输入自己要设置的本地仓库的路径即可,下图是我自己设置的本地仓库的路径。
3)配置阿里云镜像:
通常,默认的仓库因为网络原因,下载都比较慢,我们可以把自己的仓库更新为阿里的版本。
找到标签,在其中配置阿里云镜像,如下图所示;
因为使用此Maven的配置作为版本控制,都会从阿里云的仓库中下载代码,速度特别快。
2、项目配置文件(pom.xml)
pom.xml 文件后缀名表示这个文件是用 XML 格式进行组织。简单的去理解, XML是一种类似我们学习过的 HTML 格式的文件,全程 Extensible MarkupLanguage,Java 语言中经常会用 XML 用来做配置管理。
maven项目创建成功后就会生成pom.xml文件,见下面代码:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!--上面的内容完全不用管,使用自动生成的就行,是用于一些校验规则指定的-->
<!--这里指定的是POM的版本,也不需要动-->
<modelVersion>4.0.0</modelVersion>
<!--这里是项目的描述信息,是新建项目时我们填入的内容-->
<groupId>com.wang</groupId>
<artifactId>java_chatroom</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!--一般把我们需要的内容附加在这下面-->
<!--这个标签中指定所有的依赖项-->
<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>
<!--一般我们把构建相关的配置放这里-->
<build>
<finalName>java_chatroom</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>
</plugins>
</pluginManagement>
</build>
</project>
1)依赖
下面三个字段相当于确定一个产品,使用第三方依赖也是依赖下面三个字段
<groupId>bit</groupId>//组织名,规范是组织名伪代码所在包的根路径
<artifactId>com</artifactId>//产品名,也就是项目名
<version>1.0-SNAPSHOT</version>//版本
我们所添加的任意一款依赖,都是由这三部分组成,如下图的MySQL:
2)插件
maven 同时还提供了开放的插件开发功能,可以提供给大牛们进行构建过程中方便功能的开发,maven最基本的编译插件如下图所示:
四、maven的生命周期
maven 把各个阶段都做了各自的映射。主要有以下阶段: clean 清理阶段、 compile 编译阶段、test 测试阶段、 package打包阶段、 deploy 部署阶段
我们在idea中最右边一列点击Maven Projects---->Lifecycle,就可以看到整个maven项目的所有生命周期
-
clean:将target目录删除掉
-
compile: 编译命令---->编译src/main/java和 src/main/resourcrs
-
package:在target里打jar包、war包(web项目)
-
install:将package打的jar包安装到自己配置的本地仓库中
-
deploy:发布产品,将打包好的产品发布到公司的仓库中(一般是公司配置的maven私服/仓库),其他公司的项目组就可以使用
这些命令都是有优先级的,由上向下依次优先级增大,也就意味着执行下面的命令必须先执行上面的命令。