作用

  • 使用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.
  • 参考文章