Maven基础
1 构建maven项目
1.1命令:
mvn archetype:create -Dkey = value
1.2语法:
Ø Mvn是maven2的命令。
Ø Archetype:create称为一个maven目标,它的目的是通过archetype快速创建一个项目。
这里具体见“2maven插件和目标”章节
Ø -Dkey = value 负责传入一些具体配置参数。如传入groupId和artifactId等。
1.3实例:
mvn archetype:create -DgroupId = com.ying.test -DartifactId = bean -DpackageId = helloworld
截图:
图1.1 archetype:create命令实例
生成工程后,我们可以进行实际的编码,完成具体的业务需求后,我们可以执行install命令。Install的过程会把我们的本地代码编译、执行测试用例,然后在工程目录下生成一个target目录,把我们的工程达成一个包,如图:
图1.3 install之后的target目录
之后会发布到本地repository中去,如图:
图1.4 install之后的repository目录
install过程结束后,我们就可以对编译好的包进行使用了。如
图1.5 对install的包执行java命令
1.4 注意:
1. 冒号和等号的左右不可有空格,否则构建不成功,报语法错误。
2. groupId对应的是install之后本地repository中的目录结构;而artifactId对应的项目名称;packageName对应的是工程的目录结构。如下:
图1.2 archetype:create后的工程目录
2 maven插件和目标
Maven插件相当于一个功能集合,而目标就是这个功能集合中的一个子功能。如help:describe.其实help中有很多功能,如下:
图2.1 help目标展示
我们可以通过上述命令查看help插件的信息。可以看出"help"指的是maven-help-plugin,它有9个goal,而“describe”只是其中的一个goal(目标)而已。限于篇幅我列出部分goal,如下:
Help:
----describe
----evaluate
----expressions
----help
----system
插件和目标的关系一目了然。
因此,当提到一个插件目标的时候,我们常常用速记符号:pluginId :goalId.如上文我们用到的archetype :create 。 这里的“archetype”是一个插件名称,叫maven-archetype-mojo
“create”就是这个插件的一个命令,即其中的一个goal,通过help插件我们可以查看一下它的具体信息
图2.2 archetype插件信息
3 Maven生命周期
3.1执行过程
上述的install指令,实际上执行了如下几个步骤:
拷贝源代码——》编译源代码(在target目录下生成对应的class文件)——》拷贝测试代码——》编译测试代码(在target目录下生成对应的class文件)——》捕捉测试结果——》打包——》发布到repository
对应的插件和目标如下:
mvn resources:resources ---- 源码拷贝(实验过程中并没有发现有拷贝情况发生)
mvn compiler:compile ---- 源码编译
mvn resources:testResources ---- 测试代码拷贝(实验过程中并没有发现拷贝)
mvn compiler:testCompile ---- 测试代码编译
mvn surefire:test ---- 测试结果捕捉
mvn jar:jar ---- 打包
mvn install:install ---- 发布到repository
3.2坐标
Install之后打包的repository中,这个过程是依靠maven中的坐标来找到的对应目录。Maven的坐标包括:groupId,artifactId,version,packaging.这些组合构成了项目的坐标。
实例:
上边的例子中,我们的pom.xml文件中的相关坐标代码如下:
<groupId>com.ying.test</groupId> <artifactId>bean</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> |
Install之后的jar包全路径如下:
"c:\Users\hh\.m2\repository\com\ying\test\bean\1.0-SNAPSHOT\bean-1.0-SNAPSHOT.jar"
4 其他
4.1 profile
Profile的最大好处体现在环境的可移植性上,可以让不同的人员根据特殊的环境自定义不同的构建。如果两个profile中有相同属性的声明,后边的profile会覆盖前边的内容。比如example例子中的profile id为development,如果我自己声明一个id为test的profile,内容格式跟development中的一致,只是value改变,当我们执行install指令时,maven会用id为test的profile中对应的属性值。
4.2 依赖关系查找
在有需要查看maven的每个jar包是定义在哪个pom文件,由哪个包依赖的,或者要查找依赖冲突问题,可按如下的方法(知道的可以忽略):
mvn clean install -Dmaven.test.skip=true -Pdevelopment
mvn dependency:tree > log.log
在log.log文件中查找