Maven 介绍(一)

来源:互联网 发布:vm虚拟机安装linux教程 编辑:程序博客网 时间:2024/06/07 17:22

何为Maven
Maven是一个自动化构建工具。
还是一个依赖管理工具和项目信息管理工具。
Maven 规范:习惯优于配置
Maven核心:pom.xml 项目对象模型。
pom 中:groupId ,和组织公司有关+项目名称。
artifactId ,这个项目的唯一ID
项目主代码:src/main/java
项目包名规范: 基于:groupId + 自定义包名
项目测试代码:src/test/java

Maven 项目中坐标的概念:
groupId :当前Maven项目隶属的实际项目。类似于包
artifactId:实际项目中的一个Maven项目(模块)(以隶属实际项目名称为前缀)
version :Maven项目当前所处的版本。
(必须)
packaging: 定义Maven项目的打包方式,java项目默认为jar。
(可选)
classifier:定义构建输出的一些附属构件。由附加的插件生成的
(不能直接定义的)
artifactId-version[-classifier].packaging. 构件的名称。
三者构成maven项目的基本坐标。

maven 项目使用:
编译,测试,打包,运行

package ,打包之后就能加到其他项目中,使用这个类。
install 将这个jar(构件)安装到本地仓库。

Maven 骨架
项目文件结构:
src/test/java
src/main/java
pom.xml
这就是项目的骨架
archetype
**Maven

Maven 依赖

这里写代码片

scope:依赖范围:

编译主代码:classpath
执行测试:classpath
实际运行的时候:classpth
一共有三套classpath.
scope 就是控制依赖和这三中classpath 的关系。
compile: 对三种classpath都有效。
test:只对测试classpath有效。
provided:编译和测试classpath 有效。运行时无效。比如servlet-api.运行时容器已经提供。
runtime:运行时依赖测试和运行有效,编译无效。比如JDBC驱动实现
system :和provided一至,但是必须显示的指定依赖文件的路径。和本机系统绑定。
import:??? 该依赖只有在dependencyManagement元素下有效果。
将目标pom中的dependencyManagement 配置导入合并到当前dependencyManagement 元素中。

传递性依赖
a依赖b ,b依赖c a传递依赖c.
传递性依赖与依赖范围:
左边列位a依赖b。上边列位b依赖c.交集为a依赖c的范围:

compile test provided runtime compile compile – – runtime test test – – test provided provided – provided provided runtime runtime – – runtime

依赖调解:
a-b-c-x(1.0) ,a-d-x(2.0).
a的传递性依赖有两个,但是只会选择一个。
路径最近》依赖声明顺序比如b,优先于d.
可选依赖:optional 中定义。
可选依赖是不会传递的,必须自己定义。
排除依赖:(exclusions)
归类依赖:使用Maven属性,properties
优化依赖:mvn dependency:list. mvn dependency:tree. 依赖分析:mvn dependency:analyze

Maven 仓库

任何一个构件都有其唯一的坐标。构件信息和在仓库中的路径是有关系的。
仓库分类:本地仓库,远程仓库。
中央仓库:Maven核心自带的远程仓库
私服:局域网内假设的私有仓库服务器,广域网上远程仓库的代理。

* 构件版本*
发布版本:稳定 。一个名字对应一个
快照版本:一直可能编号 一个名字可能对应多个,有时间戳进行区分。

**
* 镜像*
仓库X可以提供仓库Y存储的所有内容。
私服,设置所有仓库的镜像。

生命周期
对所有的构件过程进行抽象和统一。
Maven的生命周期是抽象的,本身不处理任何事情,实际任务交给插件完成。
大多数步骤都有默认的插件。
三套独立的生命周期:
clean: 清理项目。

1.pre-clean
2.clean mvn clean
3.post-clean
执行后面的会自动执行前面阶段。

default: 构建项目
1.validate
2.initialize
3.generate-sources
4.process-sources:处理项目主资源文件,src/main/resources.中进行变量替换等。
5.generate-resources
6.processs-resources
7.compile 编译项目的主源码。
8.process-classes
9.generate-test-sources
11.process-test-sources 处理项目测试资源文件。src/test/resource
12.generate-test-resources
13.process-test-resources
14.test-compile 编译项目的测试代码
15.process-test-classes
16.test 使用单元测试框架进行测试 –mvn test
17.prepare-package
18.package ,接受编译好的代码,打包成可发布的格式。如jar.
19.pre-integration-test
20.integration-test
21.post-integration-test
22.verify
23.install .将包安装到本地maven仓库。 mvn install
24.deploy 将包复制到远程仓库 $mvn deploy

site: 建立和发布项目站点。
pre-site:
site 生成项目站点文档
post-site
site-deploy 将生成的项目站点发布到服务器上 mvn site-deploy

各个生命周期是独立的,但是一个生命周期的前后阶段是有依赖关系的。

插件
一个插件可以有多个功能,每一个功能就是插件目标。
dependency:analyze,
dependency:tree,
dependency:list,

插件绑定:就是生命周期的阶段和插件目标的绑定。
内置绑定:
Maven在核心为一些主要的生命周期阶段绑定了很多插件的目标。
自定义绑定:
pom依赖中定义。

插件解析机制:

pom 中插件仓库的配置和依赖仓库的配置不一样
依赖:repositories,repository
插件:pluginRepositories,pluginRepository

Maven的聚合与继承:
pom.xml
聚合模块,packaging 为pom
modules 模块。
一个项目多个模块的组合:

多个模块重复的依赖,插件。我们需要使用继承来处理。

<modules>    <module>account-parent</module>    <module>account-email</module>//继承account-parent    <module>account-parsist</module></modules>

可以继承的pom元素
groupId :项目组ID
version:项目版本
description:项目的描述信息
organization:项目的组织信息
inceptionYear:项目的创始年份
url:项目 的URL地址。
developers项目的开发着信息
contributors:项目的贡献者信息
distributionManagement:项目的部署配置
issueManagement:项目的缺陷跟踪 系统信息。
ciManagement: 项目的持续集成系统信息
scm:项目的版本控制系统信息。
mailingLists:项目的右键列表信息
properties:自定义的maven属性
dependencies:项目的依赖配置。
dependencyManagement:项目的依赖管理配置
repositories:项目的仓库配置
build :包括项目的源码目录配置,输出目录配置,插件配置,插件管理配置
reporting:包括项目的报告输出目录配置,报告插件配置

依赖继承
父pom使用dependencyManagement. 不会真正的引入依赖。但是会被继承。
子pom中依赖只需要指定groupId 和artifactId. 就能引入正确的依赖。、
如果需要其他配置,可以进行覆盖配置

插件继承
Maven提供了pluginManagement 配置插件,进行继承
如果

这种方式可统一依赖,插件的版本。

聚合模块和父模块除了POM之外没有实际内容。
Maven约定
所有的maven项目都隐式的继承超级POM,这就是约定。

原创粉丝点击