gball个人知识库
首页
基础组件
基础知识
算法&设计模式
  • 操作手册
  • 数据库
  • 极客时间
  • 每日随笔
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 画图工具 (opens new window)
关于
  • 网盘 (opens new window)
  • 分类
  • 标签
  • 归档
项目
GitHub (opens new window)

ggball

后端界的小学生
首页
基础组件
基础知识
算法&设计模式
  • 操作手册
  • 数据库
  • 极客时间
  • 每日随笔
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 画图工具 (opens new window)
关于
  • 网盘 (opens new window)
  • 分类
  • 标签
  • 归档
项目
GitHub (opens new window)
  • 操作手册

  • maven

    • mvnw简介
    • build配置
  • 部署

  • git

  • 工具包

  • 测试

  • docker

  • chatgpt

  • 工具与部署
  • maven
ggball
2022-01-12

build配置

在阅读详细文档之前我们先来谈谈我自己对maven的一些个人理解,以助于从整体大局上了解maven。

  • maven是什么,用通俗的话来将,maven能帮你构建工程,管理jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目
  • 使用maven构建的项目均可以直接使用maven build完成项目的编译测试打包,无需额外配置
  • Maven是通过pom.xml来执行任务的,其中的build标签描述了如何来编译及打包项目,而具体的编译和打包工作是通过build中配置的 plugin 来完成。当然plugin配置不是必须的,默认情况下,Maven 会绑定以下几个插件来完成基本操作。
  • img

即在没有配置的情况下,执行mvn clean install时,maven会调用默认的plugin来完成编译打包操作,具体来讲,执行mvn clean install时会执行

maven-clean-plugin:2.5:clean (default-clean)

maven-resources-plugin:2.6:resources (default-resources)

maven-compiler-plugin:3.1:compile (default-compile)

maven-resources-plugin:2.6:testResources (default-testResources)

maven-compiler-plugin:3.1:testCompile (default-testCompile)

maven-surefire-plugin:2.12.4:test (default-test)

maven-jar-plugin:2.4:jar (default-jar)

maven-install-plugin:2.4:install (default-install)

等plugin

  • 4.如果有需要可以针对各个 plugin 进行特殊配置,需要在pom.xml中的标签中显示指定 plugin 和 属性配置。
  • img

如上配置了maven-compiler-plugin的版本和编译时使用的jdk版本

POM.XML的build标签

在Maven的pom.xml文件中,Build相关配置包含两个部分,一个是,另一个是,这里我们只介绍。

1.pom.xml中的两种build

在Maven的pom.xml文件中,存在如下两种:

img

说明:

一种被称为Project Build,即是的直接子元素。另一种被称为Profile Build,即是的直接子元素。

Profile Build包含了基本的build元素,而Project Build还包含两个特殊的元素,即各种<...Directory>和。

2.Profile Build和Project Build的共有元素

  1. 共用的基本build元素

示例如下:

img

说明:

  • defaultGoal,执行构建时默认的goal或phase,如jar:jar或者package等
  • directory,构建的结果所在的路径,默认为${basedir}/target目录
  • finalName,构建的最终结果的名字,该名字可能在其他plugin中被改变

资源往往不是代码,无需编译,而是一些properties或XML配置文件,构建过程中会往往会将资源文件从源路径复制到指定的目标路径。

给出各个资源在Maven项目中的具体路径。示例如下:

img

说明:

  • resources,build过程中涉及的资源文件

  • targetPath,资源文件的目标路径

  • filtering,构建过程中是否对资源进行过滤,默认false

  • directory,资源文件的路径,默认位于${basedir}/src/main/resources/目录下

  • includes,一组文件名的匹配模式,被匹配的资源文件将被构建过程处理

  • excludes,一组文件名的匹配模式,被匹配的资源文件将被构建过程忽略。同时被includes和excludes匹配的资源文件,将被忽略。

  • filters,给出对资源文件进行过滤的属性文件的路径,默认位于${basedir}/src/main/filters/目录下。属性文件中定义若干键值对。在构建过程中,对于资源文件中出现的变量(键),将使用属性文件中该键对应的值替换。

  • testResources,test过程中涉及的资源文件,默认位于${basedir}/src/test/resources/目录下。这里的资源文件不会被构建到目标构件中

给出构建过程中所用到的插件。

img

说明:

  • groupId

  • artifactId

  • version

  • extensions,是否加载该插件的扩展,默认false

  • inherited,该插件的configuration中的配置是否可以被(继承该POM的其他Maven项目)继承,默认true

  • configuration,该插件所需要的特殊配置,在父子项目之间可以覆盖或合并

  • dependencies,该插件所特有的依赖类库

  • executions,该插件的某个goal(一个插件中可能包含多个goal)的执行方式。一个execution有如下设置:

  • id,唯一标识

  • goals,要执行的插件的goal(可以有多个),如run

  • phase,插件的goal要嵌入到Maven的phase中执行,如verify

  • inherited,该execution是否可被子项目继承

  • configuration,该execution的其他配置参数

在中,与并列,两者之间的关系类似于与之间的关系。中也配置,其配置参数与中的完全一致。只是,往往出现在父项目中,其中配置的往往通用于子项目。子项目中只要在中以声明该插件,该插件的具体配置参数则继承自父项目中对该插件的配置,从而避免在子项目中进行重复配置。

3. Project Build特有的<...Directory>

往往配置在父项目中,供所有父子项目使用。示例如下:

img

目录可以使用绝对路径,如示例所示。如果使用相对路径,则所有的相对路径都是在${basedir}目录下。

4. Project Build特有的

是执行构建过程中可能用到的其他工具,在执行构建的过程中被加入到classpath中。

也可以通过激活构建插件,从而改变构建的过程。

通常,通过给出通用插件的一个具体实现,用于构建过程。

的使用示例如下:

img

==================================================================

****************************** maven默认的输入输出目录 ************************************

==================================================================

构建Maven项目的时候,如果没有进行特殊的配置,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

上次更新: 2025/06/04, 15:06:15
mvnw简介
一台linux服务器安装多个mysql服务

← mvnw简介 一台linux服务器安装多个mysql服务→

最近更新
01
AIIDE
03-07
02
githubActionCICD实战
03-07
03
windows安装Deep-Live-Cam教程
08-11
更多文章>
Theme by Vdoing
总访问量 次 | 总访客数 人
| Copyright © 2021-2025 ggball | 赣ICP备2021008769号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×

评论

  • 评论 ssss
  • 回复
  • 评论 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
  • 回复
  • 评论 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
  • 回复
×