一、官网概述及Maven特点
Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. 一个以项目为对象模型(POM)的软件项目管理工具,通过配置来管理项目的构建,报告和文档等等。
Maven把整个项目当成一个对象(与项目具体内容无关),所以其构建过程是一个标准/统一/可高度复用的过程。Maven通过pom.xml来定义项目的构建(如加载依赖、编译、生成目录、打包、部署等等),并且支持项目间继承和聚合,相比传统操作来说,构建过程更简单、集中和自动化;这两大特点使maven成为当前主流的构建工具;除此之外Maven中央仓库还提供了大量的依赖库,还支持开发者本地源、能够与svn、git等源码工具集成管理项目发布等等。
二、下载 / 安装 / 环境变量配置(mvn -version) / 目录说明
官网地址:http://maven.apache.org/download.cgi
- bin目录用来存储mvn相关指令
- boot目录只包含一个plexus-classworlds-xxx.jar,这是maven自己的类加载器,maven使用该框架加载自己的类。
- conf目录存放了一些配置信息,其中比较重要的是settings.xml,对该文件的修改,对所有用户生效;将该文件copy一份到Maven本地仓库目录.m2下,对其的修改则是用户级别。
- lib目录存放Maven自身的依赖库
三、创建Maven项目
执行mvn archetype:generate命令,通过maven原型创建项目,成功后会在当前目录下生成Maven原型标准目录。(如果创建时卡在Searching for remote catalog: .../archetype-catalog.xml,则加上参数-DarchetypeCatalog=internal,表示不从远程服务器上取archetype-catalog.xml)
E:\mvnproject>mvn archetype:generate -DgroupId=com.zst -DartifactId=traveler
-Dversion=1.0.0-SNAPSHOT -X
四、Maven构建的生命周期及命令
Maven生命周期是对构建过程的一个抽象和统一,它本身不做任何工作,实际构建阶段中所有任务都由插件来完成。Maven有三套生命周期:clean、default、site。clean生命周期的目的是清理项目;default周期的目的是构建项目,所以它定义了项目构建时需要执行的所有步骤;site周期的任务是为项目生成站点文档。
每个生命周期内又包含不同的阶段,每阶段通过调用插件来实现该阶段任务,且阶段依次有序进行。这一点从上面新生成的pom.xml可以看出(注 : 原型版本不同,生成的pom.xml文件也不同,为了看到效果,在上面的命令中添加参数指定原型版本如-DarchetypeVersion=1.4)
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_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-jar-plugin</artifactId>
<version>3.0.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>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
其中default周期是功能最丰富的周期,下面是其主要阶段及各阶段对应插件:
- validate:项目验证,如是否为一个正常的Maven项目等等。
- process-sources:对src/main/resource中的资源文件进行变量替换,并输出到target下
- compile:编译项目的主代码,一般是将src/main/java下的代码编译成class,并放至target下
- test-complie:编译测试代码,并输出到测试的classpath下
- test:执行单元测试代码(注:Maven要求测试类必须以*Test.java结尾)
- package:打包项目为可分发的格式,即生成JAR、WAR、EAR包等。
- install:将软件包安装到本地存储库中,作为本地其他项目的依赖项
- deploy:在集成或发行版环境中完成,将包复制到远程存储库,与其他开发人员和项目共享。
site生命周期相关阶段包括生成生成文档、部署到指定Web服务器等等。这个在实践中很常用,后续会有篇章介绍远程部署。
关于Maven生命周期的详细信息可以参考官网地址:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
五、打包 / 生成文档 / 安装到本地仓库
执行mvn package进行打包,默认会在target目录下生成对应的.jar包。
执行mvn site操作默认会生成site目录,该目录包含项目的站点文档信息。
执行mvn install安装到本地仓库,将pom.xml文件加入到了打包好的jar包。从而保证该项目可以作为其它项目的依赖项存在,甚至父项目。
E:\mvnproject\traveler>mvn package
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ traveler ---
[INFO] Building jar: E:\mvnproject\traveler\target\traveler-1.0.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...
E:\mvnproject\traveler>java -cp target\traveler-1.0.0-SNAPSHOT.jar com.zst.App
Hello World!
...
E:\mvnproject\traveler>mvn site
...
E:\mvnproject\traveler>mvn install
...按序再次执行一遍编译、测试、打包等操作
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ traveler ---
[INFO] Installing E:\mvnproject\traveler\target\traveler-1.0.0-SNAPSHOT.jar to E:\maven\m2\repository\com\zst\traveler\1.0.0-SNAPSHOT\traveler-1.0.0-SNAPSHOT.jar
[INFO] Installing E:\mvnproject\traveler\pom.xml to E:\maven\m2\repository\com\zst\traveler\1.0.0-SNAPSHOT\traveler-1.0.0-SNAPSHOT.pom
...
E:\mvnproject\traveler>
六 配置详解