作用
- 使用maven构建的项目可以直接使用maven build完成项目的编译、测试、打包,无需额外配置。
- build标签描述了如何编译及打包项目,具体的编译和打包工作是通过其中的plugin配置来实现的。当然,plugin不是必须的,即使不添加默认也会引入以下插件:
- 如果有需要可以另外进行配置,以下配置了编译时使用的jdk版本。
build
- 分类:一种是直接写在
下,即project build。另一种是直接写在 下,即profile build。 - 前者包含了build的基本元素和<…Directory>和
,后者指包括基本元素。 - 三个基本元素
- defaultGoal:执行构建(即编译或打包吧)时默认的goal或phase,如jar:jar或者package。
- directory:构建的结果所在的路径,默认为${basedir}/target目录。
- finalName:打包文件名。
- resources元素:资源往往不是代码,而是properties或xml文件,无需编译,构建过程中往往会将资源文件从源路径复制到指定的目标路径,resources则给出各个资源在maven项目中的具体路径。
- targetPath:资源文件的目标路径。
- filtering:构建过程中是否对资源进行过滤,默认false。
- directory:资源文件源路径,默认位于${basedir}/src/main/resources/目录下。
- includes:一组文件名的匹配模式,被匹配的资源文件将被构建过程处理。
- excludes:一组文件名的匹配模式,被匹配的资源文件将被构建过程忽略。同时也被includes的文件依然被忽略。
- filters:给出对资源文件进行过滤的属性文件的路径,默认位于${basedir}/src/main/filters/目录下。属性文件中定义若干了键值对,用于在构建过程中将资源文件中出现的变量(键)替换为对应的值。
- testResources:test过程中涉及的资源文件,默认位于${basedir}/src/test/resources/目录下,它们不会被构建到目标构件中。
- plugins:设置构建过程中需要的插件。
- extensions:是否加载该插件的扩展,默认false。
- inherited: 该插件的configuration中的配置是否可以被继承(继承该pom中的其他maven项目),默认true。
- configuration:该插件所需要的特殊配置,在父子项目之间可以覆盖或合并。
- dependencies: 该插件所需要的依赖类库。
- executions: 该插件的某个goal的执行方式。一个executions有如下属性:
- id: 唯一标识。
- goals:要执行的插件的goal,如
run - phase: 插件的goal要嵌入到Maven的phase中执行,如verify
- inherited: 该execution是否可被子项目继承
- configuration:该execution的其他配置参数
- …Directory: 往往配置在父项目中,供所有父子项目使用。目录可以使用绝对路径,如下图所示,若使用相对路径,则都是在${basedir}目录下。
- extensions:执行构建过程中可能用到的其他工具,在执行过程中被加入到classpath中;也可以激活构建插件,从而改变构建的过程。通常通过它给出通用插件的一个具体实现,用于构建过程。
编译后文件的存放目录
- 即maven默认的输入输出目录。
- src/main/java和src/test/java:这两个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,但是这两个目录中的其他文件都会被忽略掉。
src/main/resouces和src/test/resources:这两个目录中的文件也会分别被复制到target/classes和target/test-classes目录中。
当是web项目时,会在target下生成myproject目录,myproject是你的项目名。
- src/main/webapps:这个目录中的文件会被复制到target/myProject目录中.
- target/classes:默认会把这个目录中的所有内容复制到target/myProject/WEB-INF/classes目录中.
- dependency: 默认会将项目的依赖复制到target/myProject/WEB-INF/lib.
- 参考文章