子项目使用父项目依赖时,正常情况子项目应该继承父项目依赖,无需使用版本号
maven基础标签
<sourceDirectory/>
该元素设置了项目源码目录,当构建项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。
<outputDirectory/>
被编译过的应用程序class文件存放的目录。
<resources>
这个元素描述了项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。
<targetPath/>
描述了资源的目标路径。该路径相对target/classes目录(例如${project.build.outputDirectory})。举个例 子,如果你想资源在特定的包里(org.apache.maven.messages),你就必须该元素设置为org/apache/maven /messages。然而,如果你只是想把资源放到源码目录结构里,就不需要该配置。
<filtering/>
是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。
<directory />
描述存放资源的目录,该路径相对POM路径
<includes />
包含的模式列表,例如**/*.xml
<excludes/>
排除的模式列表,例如**/*.xml
<resources/>
<directory/>
构建产生的所有文件存放的目录
<filters/>
当filtering开关打开时,使用到的过滤器属性文件列表
<plugin>
使用的插件列表
<inherited/>
任何配置是否被传播到子项目
</plugin>
<profile>
在列的项目构建profile,如果被激活,会修改构建处理,根据环境参数或命令行参数激活某个构建处理
<id />
构建配置的唯一标识符。即用于命令行激活,也用于在继承时合并具有相同标识符的profile。
<activation/>
自动触发profile的条件逻辑。Activation是profile的开启钥匙。profile的力量来自于它 能够在某些特定的环境中自动使用某些特定的值;这些环境通过activation元素指定。activation元素并不是激活profile的唯一方式
<property/>
如果Maven检测到某一个属性(其值可以在POM中通过${名称}引用),其拥有对应的名称和值,Profile就会被激活。如果值 字段是空的,那么存在属性名称字段就会激活profile,否则按区分大小写方式匹配属性值字段
<profile/>
<modules/>
模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径
<repository/>
包含需要连接到远程仓库的信息
<pluginRepositories/>
发现插件的远程仓库列表,这些插件用于构建和报表
<dependency>
该元素描述了项目相关的依赖
<type/>
依赖类型,默认类型是jar。它通常表示依赖的文件的扩展名,但也有例外。一个类型可以被映射成另外一个扩展名或分类器。类型经常和使用的打包方式对应。尽管这也有例外。一些类型的例子:jar,war,ejb-client和test-jar。如果设置extensions为 true,就可以在 plugin里定义新的类型。
<classifier/>
依赖的分类器。分类器可以区分属于同一个POM,但不同构建方式的构件。分类器名被附加到文件名的版本号后面。例如,如果你想要构建两个单独的构件成 JAR,一个使用Java 1.4编译器,另一个使用Java 6编译器,你就可以使用分类器来生成两个单独的JAR构件。
<scope/>
依赖范围。在项目发布过程中,帮助决定哪些构件被包括进来。
- compile :默认范围,用于编译
- provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
- runtime: 在执行时需要使用
- test: 用于test任务时使用
- system: 需要外在提供相应的元素。通过systemPath来取得
- systemPath: 仅用于范围为system。提供相应的路径
- optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用
<dependency/>
<dependencyManagement/>
继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述group ID和 artifactID信息),如果group ID和artifact ID以外的一些信息没有描述,则通过group ID和artifact ID 匹配到这里的依赖,并使用这里的依赖信息。
<distributionManagement/>
项目分发信息,在执行mvn deploy后表示要发布的位置。有了这些信息就可以把网站部署到远程服务器或者把构件部署到远程仓库。
maven生命周期
当一个阶段通过 Maven 命令调用时,例如 mvn compile,只有该阶段之前以及包括该阶段在内的所有阶段会被执行。
Maven 有以下三个标准的生命周期:
clean:项目清理的处理
default(或 build):项目部署的处理
site:项目站点文档创建的处理
clean
项目清理
validate
校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
compile
编译项目的源代码。
test
使用合适的单元测试框架运行测试(Juint是其中之一)。
package
将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
verify
运行任意的检查来验证项目包有效且达到质量标准。
install
安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
deploy
将最终的项目包复制到远程仓库中与其他开发者和项目共享。
maven构建配置文件
构建配置文件是一系列的配置项的值,可以用来设置或者覆盖 Maven 构建默认值。配置文件在 pom.xml 文件中使用 <activeProfiles> 或者 <profiles> 元素指定,并且可以通过各种方式触发。配置文件在构建时修改 POM,并且用来给参数设定不同的目标环境(比如说,开发(Development)、测试(Testing)和生产环境(Production)中数据库服务器的地址)。
配置文件激活
- 使用命令控制台输入显式激活。
- 通过 maven 设置。
- 基于环境变量(用户或者系统变量)。
- 操作系统设置(比如说,Windows系列)。
- 文件的存在或者缺失。
Maven 插件
我们在输入 mvn 命令的时候 比如 mvn clean,clean 对应的就是 Clean 生命周期中的 clean 阶段。但是 clean 的具体操作是由 maven-clean-plugin 来实现的。
所以说 Maven 生命周期的每一个阶段的具体实现都是由 Maven 插件实现的。
Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。Maven 插件通常被用来:
- 创建 jar 文件
- 创建 war 文件
- 编译代码文件
- 代码单元测试
- 创建工程文档
- 创建工程报告
Maven 快照
快照是一种特殊的版本,指定了某个当前的开发进度的副本。不同于常规的版本,Maven 每次构建都会在远程仓库中检查新的快照。 现在 data-service 团队会每次发布更新代码的快照到仓库中,比如说 data-service:1.0-SNAPSHOT 来替代旧的快照 jar 包。