Maven的pom.xml文件结构中的build

 更新时间:2023年07月26日 08:58:24   作者:易生一世  
本文主要介绍了Maven的pom.xml文件结构中的build,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

1. 在Maven的pom.xml文件中,存在如下两种<build>

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <!-- "Project Build" contains elements of the BaseBuild set and the Build set-->
  <build>...</build>
  <profiles>
    <profile>
      <!-- "Profile Build" contains elements of the BaseBuild set only -->
      <build>...</build>
    </profile>
  </profiles>
</project>

说明:

一种<build>被称为Project Build,即是<project>的直接子元素。另一种<build>被称为Profile Build,即是<profile>的直接子元素。

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

2. Profile Build和Project Build共用的基本build元素

1) 示例如下

<build>
  <defaultGoal>install</defaultGoal>
  <directory>${basedir}/target</directory>
  <finalName>${artifactId}-${version}</finalName>
  ...
</build>

说明:

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

2) <resources>

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

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

  <build>
    ...
    <filters>
      <filter>filters/filter1.properties</filter>
    </filters>
    <resources>
      <resource>
        <targetPath>META-INF/plexus</targetPath>
        <filtering>false</filtering>
        <directory>${basedir}/src/main/plexus</directory>
        <includes>
          <include>configuration.xml</include>
        </includes>
        <excludes>
          <exclude>**/*.properties</exclude>
        </excludes>
      </resource>
    </resources>
    <testResources>
      ...
    </testResources>
    ...
  </build>

说明:

  • 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/目录下。这里的资源文件不会被构建到目标构件中

3) <plugins>

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

  <build>
    ...
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.6</version>
        <extensions>false</extensions>
        <inherited>true</inherited>
        <configuration>
          <classifier>test</classifier>
        </configuration>
        <dependencies>...</dependencies>
        <executions>...</executions>
      </plugin>
    </plugins>
  </build>

说明:

  • groupId
  • artifactId
  • version
  • extensions,是否加载该插件的扩展,默认false
  • inherited,该插件的configuration中的配置是否可以被(继承该POM的其他Maven项目)继承,默认true
  • configuration,该插件所需要的特殊配置,在父子项目之间可以覆盖或合并
  • dependencies,该插件所特有的依赖类库
  • executions,该插件的某个goal(一个插件中可能包含多个goal)的执行方式。一个execution有如下设置:
    • id,唯一标识
    • goals,要执行的插件的goal(可以有多个),如<goal>run</goal>
    • phase,插件的goal要嵌入到Maven的phase中执行,如verify
    • inherited,该execution是否可被子项目继承
    • configuration,该execution的其他配置参数

4) <pluginManagement>

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

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

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

  <build>
    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
    <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
    <outputDirectory>${basedir}/target/classes</outputDirectory>
    <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
    ...
  </build>
</project>

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

4. Project Build特有的<extensions>

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

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

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

<extensions>的使用示例如下:

  <build>
    ...
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ftp</artifactId>
        <version>1.0-alpha-3</version>
      </extension>
    </extensions>
    ...
  </build>
</project>

到此这篇关于Maven的pom.xml文件结构中的build的文章就介绍到这了,更多相关Maven pom.xml build内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java 对文件夹目录进行深度遍历实例代码

    java 对文件夹目录进行深度遍历实例代码

    这篇文章主要介绍了java 对文件夹目录进行深度遍历实例代码的相关资料,需要的朋友可以参考下
    2017-03-03
  • 新手入门Jvm--jvm概览

    新手入门Jvm--jvm概览

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的
    2021-06-06
  • 基于Java字符编码的使用详解

    基于Java字符编码的使用详解

    本篇文章对Java字符编码的使用进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • java多线程编程之Synchronized关键字详解

    java多线程编程之Synchronized关键字详解

    这篇文章主要为大家详细介绍了java多线程编程之Synchronized关键字,感兴趣的朋友可以参考一下
    2016-05-05
  • Java如何向指定文件操作一段内容(增加,删除均可使用本方法)

    Java如何向指定文件操作一段内容(增加,删除均可使用本方法)

    这篇文章主要介绍了Java如何向指定文件操作一段内容(增加,删除均可使用本方法),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java操作Elasticsearch rest-high-level-client 的基本使用

    Java操作Elasticsearch rest-high-level-client 的基本使用

    这篇文章主要介绍了Java操作Elasticsearch rest-high-level-client 的基本使用,本篇主要讲解一下 rest-high-level-client 去操作 Elasticsearch的方法,结合实例代码给大家详细讲解,需要的朋友可以参考下
    2022-10-10
  • java 浅析代码块的由来及用法

    java 浅析代码块的由来及用法

    所谓代码块是指用"{}"括起来的一段代码,根据其位置和声明的不同,可以分为普通代码块、构造块、静态块、和同步代码块。如果在代码块前加上 synchronized关键字,则此代码块就成为同步代码块
    2021-10-10
  • Java程序员必看的RAG入门实战教程

    Java程序员必看的RAG入门实战教程

    本文详细介绍了RAG(检索增强生成)技术,旨在解决大模型在回答企业内部具体问题时的幻觉和静态知识问题,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2026-04-04
  • 使用Mybatis的PageHelper分页工具的教程详解

    使用Mybatis的PageHelper分页工具的教程详解

    这篇文章主要介绍了使用Mybatis的PageHelper分页工具的教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 解读SpringMVC 请求参数接收

    解读SpringMVC 请求参数接收

    这篇文章主要介绍了SpringMVC请求参数接收的相关操作,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-07-07

最新评论