Maven介绍和安装使用教程
目录
一、Maven简单介绍
1、定义
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生猛周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
2、Maven 安装
- 下载maven版本;
- 设置环境变量中的path
- 新建系统变量 M2_HOME 变量值:D:\Java\apache-maven-3.1.1
- 编辑系统变量 Path 添加变量值: ;%M2_HOME%\bin/
3、本地仓库的安装
- 修改config中的setting.xml指明本地路径
<localRepository>/path/to/local/repo</localRepository>
- Setting.xml中
- xmlns ——是XML NameSpace的缩写,因为XML文件的标签名称都是自定义的,自己写的和其他人定义的标签很有可能会重复命名,而功能却不一样,所以需要加上一个namespace来区分这个xml文件和其他的xml文件,类似于java中的package。
- .xmlns:xsi ——是指xml文件遵守xml规范,xsi全名:xml schema instance,是指具体用到的schema资源文件里定义的元素所准守的规范。即http://www.w3.org/2001/XMLSchema-instance这个文件里定义的元素遵守什么标准
- xsi:schemaLocation——是指本文档里的xml元素所遵守的规范,这些规范都是由官方制定的,可以进你写的网址里面看版本的变动。xsd的网址还可以帮助你判断使用的代码是否合法。
4、新建一个简单的项目
Pom.xml: 项目的坐标
- GroupID用来表示项目的名称;
- Artifactid表示项目模块的名称,建议使用项目的名称模块名称表示
- Version:表示项目版本的名称
5、创建代码和测试代码
- 源代码应该放置在src/main/java中;
- 源代码的资源文件应该放置在src/main/resources文件夹中;
- 测试代码应该放置爱src/test/java中
- 测试代码的资源文件应该放置在src/test/resources文件夹中;
6、运行mvn
- mvn clean –表示运行清理操作(会默认把target文件夹中的数据清理)
- mvn clean compile –表示先运行清理之后运行编译,会见代码编译到target文件夹中;
- mvn clean test 运行清理测试;
- mvn clean package 运行清理和打包
- mvn clean install 运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用
- mvn clean deploy 运行清理和发布(发布到私服上面)
7、maven的生成方式
mvn archetype:generate 完成项目骨架的建构
二、Maven依赖
-
依赖包的查询
- 所有的一类都是通过坐标来进行储存的(GAVà groupID, airtifactID,version)
- 坐标查询http://mvnrepository.com/
-
依赖是会被传递和依赖冲突(jessy-exclusion)
- A->B; B->C 依赖包具有传递性
- B->a1.0; c->a2.0; d-B,C 这个时候在的pom中,哪一个依赖先写的依赖版本
-
- 如果希望精确的控制依赖包,可以使用依赖的排除功能进行控制
-
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
-
<exclusion>
- 如果希望精确的控制依赖包,可以使用依赖的排除功能进行控制
-
依赖的范围(test,compile)
- Compilefanwei 如果没有写scope默认就是compile范围;在编译和测试,打包的时候都需要
- Test范围不会传递到compile,(测试范围有效,在编译和打包时都不会使用这个依赖)
- Provide (servlet-api) 在tomcat中就有,编译和测试中需要,但是打包不需要
- Runtime 运行时候有依赖,在编译时候不依赖
-
聚合和继承
-
<packaging>pom</packaging>
<modules>
<module>jessy-hello</module>
<module>jessy-core</module>
<module>jessy-test</module>
<module>jessy-exclusion</module>
</modules> - dependencyManagement 和dependencies 的区别;对于依赖的继承而言,可以通过dependencyManagement来完成管理,如果不管理子类全部继承,这种可能会导致一些模块存在不需要依赖的
-
<packaging>pom</packaging>
中心仓库:
maven-settings-builder-3.5.0.jar
D:\train\apache-maven-3.5.0\lib\maven-model-builder-3.5.0\org\apache\maven\model
三、Maven生命周期和插件
- Maven有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,初学者容易将Maven的生命周期看成一个整体,其实不然。这三套生命周期分别是:
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
-
Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
-
mvn clean ,这个的clean是Clean生命周期的一个阶段。有点绕?要知道有Clean生命周期,也有clean阶段。Clean生命周期一共包含了三个阶段:
- pre-clean 执行一些需要在clean之前完成的工作
- clean 移除所有上一次构建生成的文件
- post-clean 执行一些需要在clean之后立刻完成的工作
-
mvn clean ,这个的clean是Clean生命周期的一个阶段。有点绕?要知道有Clean生命周期,也有clean阶段。Clean生命周期一共包含了三个阶段:
-
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。(compile)
- Maven的最重要的Default生命周期,绝大部分工作都发生在这个生命周期中,这里,我只解释一些比较重要和常用的阶段:
- Validate : the project is correct and all necessary information is available
- generate-sources
- process-sources
- generate-resources
- process-resources 复制并处理资源文件,至目标目录,准备打包。
- compile 编译项目的源代码。
- process-classes
- generate-test-sources
- process-test-sources
- generate-test-resources
- process-test-resources 复制并处理资源文件,至目标测试目录。
- test-compile 编译测试源代码。
- process-test-classes
- test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
- prepare-package
- package 接受编译好的代码,打包成可发布的格式,如 JAR 。
- pre-integration-test
- integration-test
- post-integration-test
- verify
- install 将包安装至本地仓库,以让其它项目依赖。
- deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。
-
Site Lifecycle 生成项目报告,站点,发布站点。
-
- pre-site 执行一些需要在生成站点文档之前完成的工作
- site 生成项目的站点文档
- post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
- site-deploy 将生成的站点文档部署到特定的服务器上
-
Maven的生命周期是抽象的,实际需要插件来完成任务,这一过程是通过将插件的目标(goal)绑定到生命周期的具体阶段(phase)来完成的。如:将maven-compiler-plugin插件的compile目标绑定到default生命周期的compile阶段,完成项目的源代码编译:
2.插件是maven的核心,所有执行的操作都是基于插件来文成的
- 为了让一个插件中可以实现众多的形似功能,maven为插件设定了目标,一个插件中可能有多个目标;
- 其实生命周期中的重要的每个阶段都是由插件的一个具体目标来执行的
- D:\train\repository\org\apache\maven\plugins
3.内置的绑定
- Maven对一些生命周期的阶段(phase)默认绑定了插件目标,因为不同的项目有jar、war、pom等不同的打包方式,因此对应的有不同的绑定关系,其中针对default生命周期的jar包打包方式的绑定关系如下:
- 第二列中,冒号后面即是绑定的插件目标,冒号前面是插件的前缀(prefix),是配置和使用插件的一种简化方式。Plugin Prefix
Apache插件的网址: http://maven.apache.org/plugins/index.html
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
</plugin>
</plugins>
</build>