Maven学习笔记(二)
1.Maven的生命周期和插件
clean\compile\test \package\install
完整的项目构建过程包括:
清理、编译、测试、打包、集成测试、验证、部署
Maven包含三套独立生命周期,执行某个命令,会依次顺序执行前面的命令,但不会处罚另外两套命令。
1.clean 清理项目
pre-clean 执行清理前的文件啊
clean清理上一次构建生成的所有文件
post-clean 执行清理后的文件。
2.default 构建项目(最核心)
compile test package install
3.site 生成项目站点
pre-site 在生成项目站点前要完成的工作
site 生成项目的站点文档。
post-site 在生成项目站点后要完成的工作。
site-deploy 发布生成的站点到服务器上。
maven中的许多功能均是调用插件实现的。
例如:source插件可以将项目源码进行打包
步骤如下:
- 1.打开pom.xml,向其中加入如下代码
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<!--绑定source到package阶段-->
<executions>
<execution>
<!--指定运行阶段-->
<phase>package</phase>
<!--指定运行目标-->
<goal>jar-no-fork</goal>
</execution>
</executions>
</plugin>
</plugins>
</build>
之后,进行maven操作时,需要:选中项目右键-》run as -》 maven build…
在goals中填写需要的maven操作。之后,直接敲击shift+alt+x+m即可直接运行maven命令。
2.pom.xml的结构
<project xmlns="...">
<!--指定当前pom的版本-->
<modelVersion>4.0.0</modelVersion>
<groupId>反写的公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<!--第一个0表示大版本号
第二个0表示分支版本号
第三个0表示小版本号
0.0.1
snapshot快照
alpha 内部测试
beta公测
Release 稳定
GA 正式发布
-->
<version></version>
<!--
默认是jar
war zip pom
-->
<package></package>
<!--项目描述名-->
<name></name>
<!--项目地址-->
<url></url>
<!--开发人员-->
<developers></developers>
<!--证书-->
<licenses></licenses>
<!--组织名-->
<organization></organization>
<!--依赖列表重中之重-->
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<type></type>
<!--依赖范围-->
<scope>test</scope>
<!--设置依赖是否可选,有两个值,true、false。默认是false,子项目是继承的。为true,子项目必须选择改该依赖-->
<optional></optional>
<!--排除依赖列表-->
<exclusions>
<exclusion>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!--依赖管理模块,定义在父类模块,供子模块继承使用,定义的依赖并不会在该模块中使用-->
<dependencyManagement>
<dependency>
</dependency>
</dependencyManagement>
<!--为构建行为提供相应的支持-->
<build>
<plugins>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugins>
</build>
<!--子模块对父模块pom的继承-->
<parent></parent>
<!--聚合运行多个的maven项目,使用此标签方便整体的打包-->
<modules></modules>
</project>
3.依赖的范围
编写项目,应用某一jar包,须将jar包引用到项目的classpath中。
maven中为我们提供了三种classpath:编译、测试、运行
就是来控制依赖与三中的classpath的关系。
dependency Scope共有6种值可供选择
compile、 默认的范围,比那一测试运行都有效
provided、 在编译测试和测试有效,例如:jdbc
runtime、 测试运行有效
test、 在测试有效
system、 编译测试有效,与本机系统相关联,可以执行差
import、 导入的范围,只是用子啊dependencyManagement中,表示从其它的pom中导入dependecy的配置。
例如:
<project>
<modelVersion>4.0.0<modelVersion>
<groupId>maven</groupId>
<artifactId>B</artifactId>
<package>pom</package>
<name>B</name>
<version>1.0</version>
<dependencyManagement>
<dependencies>
<dependency>
<!--将A中依赖导入到B中-->
<groupId>maven</groupId>
<artifactId>A</artifactId>
<package>pom</package>
<version>1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>d</artifactId>
<package>pom</package>
<version>1.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
通过exclusions可以取消传递依赖。
4.依赖冲突
假设:A->B->C
B依赖common-2.0
C依赖common-2.4
则如果,A的pom中只写了依赖B,那么,A依赖的common是2.0版本(就近原则依赖)
如果,A的pom写了以来B,同时有写了以来C,且先声明的对C的依赖。则A依赖的common是2.4版本的(先声明,先依赖)
5.聚合与继承
聚合,既同时打包整个项目的多个模块,
../A
../B
继承,在开发多个模块时,可能有些模块共用了同一个依赖,则只需顶一个被继承者,使其他模块进行继承即可。
继承者pom.xml
<project>
<modelVersion>4.0.0<modelVersion>
<groupId>maven</groupId>
<artifactId>B</artifactId>
<package>pom</package>
<name>B</name>
<version>1.0</version>
<!--参数可以写入配置标签中-->
<properties>
<d.version>1.0</d.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>d</artifactId>
<package>pom</package>
<version>${d.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
继承者的pom.xml添加:
<parent>
<groupId>maven</groupId>
<artifactId>B</artifactId>
<version>1.0</version>
</parent>
此处贴出博主编写的maven练习源码供大家参考学习,如有问题,欢迎大家共同讨论。