Maven pom文件基本结构二(maven build)

【maven】5、Maven 多环境部署(filters、resources、profiles) Maven多环节部署(filters、resources、profiles) 阅读详情

 

一.分类

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

(1)全局配置(project build)

         针对整个项目的所有情况都有效

(2)配置(profile build)

           针对不同的profile配置

<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>。

二. 配置说明

1.基本元素

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

执行build任务时,如果没有指定目标,将使用的默认值。

如上配置:在命令行中执行mvn,则相当于执行mvn install

directorybuild目标文件的存放目录,默认在${basedir}/target目录
finalNamebuild目标文件的名称,默认情况为${artifactId}-${version}
filter

定义*.properties文件,包含一个properties列表,该列表会应用到支持filter的resources中。

也就是说,定义在filter的文件中的name=value键值对,会在build时代替${name}值应用到resources中。

maven的默认filter文件夹为${basedir}/src/main/filters

Maven多环境配置 filter

在开发过程中我们不可避免的会遇到需要在多种环境下进行部署,比如开发,测试,生产每个阶段都需要对应使用不同的配置(数据库,日志等等信息)。

而有了filter我们就可以根据不同环境匹配传入相应的参数,更灵活直观的使用参数,可以大大提升我们的效率。

首先需要在pom文件中确定filter和要filter的资源,这是通过在build节点中添加filter和resource来实现的,示例如下:

<filters>
  <filter>src/main/filters/filter-${env}.properties</filter> 
</filters> 
<resources> 
    <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
    </resource>    
</resources>

上述配置表示要对src/main/resources下的资源进行过滤,因为该目录下没有二进制文件,所以没有excluding。过滤时采用的过滤文件为src/main/filters/filter-${env}.properties文件,其中${env}是一个变量,表示当前使用的环境。

我们这里有两种方式为${env}这个变量传入值

1)通过maven命令直接传入

-D代表(Properties属性)

mvn package -D env=dev

这里我们是使用-D 这个命令告诉env这个变量传入的参数是dev

2)通过profile定义传入

这是通过在pom文件中通过profile定义的,如下所示

<properties>                         
  <env>dev</env> 
</properties>

<profiles> 
  <profile> 
    <id>dev</id> 
    <properties> 
      <env>dev</env> 
    </properties> 
  </profile> 

  <profile> 
    <id>test</id> 
    <properties> 
      <env>test</env> 
    </properties> 
  </profile> 

  <profile> 
    <id>prod</id> 
    <properties> 
      <env>prod</env> 
    </properties> 
  </profile> 
</profiles>

使用下面的命令P代表(Profiles配置文件) 

mvn package -P test

在<profiles>指定的<id>中,可以通过-P进行传递或者赋值。

其中properties里面表示默认的变量值,使用maven命令不设定-P时默认使用这个dev。

在测试和部署上线时分别通过maven命令-P传入当前的profile id,这样maven就会将env变量设置为对应的值,从而导致使用不同的filter文件来对resources下的文件进行过滤替换。

例如:当调用maven package时传入-Pdev(因为我们将dev设置为默认,所以也可以不传)参数,则会使用filter-dev.properties中的内容来替换resources目录中的配置文件,具体到我们的项目就是db.properties,内容如下:

......
jdbc.connection.url=${demo.jdbc.url} 
jdbc.connection.username=${demo.jdbc.username}
jdbc.connection.password=${demo.jdbc.password} 
......

filter-dev.properties文件内容如下:

......
demo.jdbc.url=jdbc:mysql://localhost:3306/localhost?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
demo.jdbc.username=root
demo.jdbc.password=111111
......

 这样在编译结束后

db.properties的内容就会变为: 
jdbc.connection.url=jdbc:mysql://localhost:3306/xiangmu?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
jdbc.connection.username=root
jdbc.connection.password=111111

2. Resources配置

      用于包含或者排除某些资源文件

<build>  
        ...  
       <resources>  
          <resource>  
             <targetPath>META-INF/plexus</targetPath>  
             <filtering>true</filtering>  
            <directory>${basedir}/src/main/plexus</directory>  
            <includes>  
                <include>configuration.xml</include>  
            </includes>  
            <excludes>  
                <exclude>**/*.properties</exclude>  
            </excludes>  
         </resource>  
    </resources>  
    <testResources>  
        ...  
    </testResources>  
    ...  
</build>  
resources一个resources元素的列表。每一个都描述与项目关联的文件是什么和在哪里
targetPath

指定build后的resource存放的文件夹,默认是basedir。

通常被打包在jar中的resources的目标路径是META-INF

filteringtrue/false,表示为这个resource,filter是否激活
directory定义resource文件所在的文件夹,默认为${basedir}/src/main/resources
includes指定哪些文件将被匹配,以*作为通配符
excludes指定哪些文件将被忽略
testResources定义和resource类似,只不过在test时使用

3. plugins配置

     用于指定使用的插件

     (不同插件内的写法也有所区别,之后会总结一些常用插件的文章)

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

 

4. pluginManagement配置

     pluginManagement的配置和plugins的配置是一样的,只是用于继承,使得可以在孩子pom中使用。

     父pom:

<build>  
    ...  
    <pluginManagement>  
        <plugins>  
            <plugin>  
              <groupId>org.apache.maven.plugins</groupId>  
              <artifactId>maven-jar-plugin</artifactId>  
              <version>2.2</version>  
                <executions>  
                    <execution>  
                        <id>pre-process-classes</id>  
                        <phase>compile</phase>  
                        <goals>  
                            <goal>jar</goal>  
                        </goals>  
                        <configuration>  
                            <classifier>pre-process</classifier>  
                        </configuration>  
                    </execution>  
                </executions>  
            </plugin>  
        </plugins>  
    </pluginManagement>  
    ...  
</build>

则在子pom中,我们只需要配置:

<build>  
    ...  
    <plugins>  
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-jar-plugin</artifactId>  
        </plugin>  
    </plugins>  
    ...  
</build>

 

Springboot与Maven多环境配置文件夹解决方案 Profile用法 我们在application.yml中为jdbc.username赋予一个值,这个值为一个变量 jdbc: username: ${jdbc.username} Maven中的profiles可以设置多个环境,当我们选择a环境后, <jdbc.username>内的值将替换上述配置文件中的变量 </profiles> <profile> <id>a</id> <properti 阅读详情

相关推荐

Maven build之pom.xml文件中的Build配置

本文主要阐述了maven build是用来干什么的,以及对build标签中各子元素配置的作用

Maven多环境配置实战 Filter

目前在开发一个wap项目,主要有开发、测试和最终部署上线几个阶段,每个阶段对配置(数据库、日志)都有不同的设置。以前都是以开发环境为主,在测试和部署上线时由部署工程师负责修改配置并上线。但是公司并非都有一个项目,我们也不是只负责一个项目,这样的工作方式导致每每上线时大家都心惊胆颤,实在忍受不了折磨,决定研究下maven下如何解决这个问题。找到方案后,不敢独享,将结果向大家介绍下。思路: 几个环境中

猛犸 3342

YOLOv13添加轻量化的EMA模块Faster_EMA,轻量又涨点!map50提升4.56个点,召回率提升9.66!

本文介绍了YOLOv13模型的优化移植方法,通过添加Faster_EMA模块和超参数调整,使模型性能显著提升。主要修改包括:1) 创建新的模型配置文件yolov13-Faster_EMA.yaml;2) 在tasks.py中添加新模块;3) 修改__init__.py和block.py文件,新增Partial_conv3和DropPath类。优化后模型mAP50提升4.56%,召回率提升9.66%,验证了改进方案的有效性。代码实现了局部卷积和随机深度等先进技术,为YOLO系列模型性能优化提供了新思路。

FJN110的博客 2605

Maven中标签的:build配置解读

Maven中标签的:build配置解读

u011250186的博客 1261

链接文件及功能安全:基于Tasking的LSL链接文件知识点梳理及实际应用分析

本文旨在记录研究链接文件时所遇到的问题及个人理解,以便日后查阅。在探索过程中,我遇到了诸多问题,同时对链接文件有了初步的认识。通过记录这些问题与理解,我希望能够为后续的研究提供清晰的思路和有价值的参考。这不仅是对研究过程的总结,更是对未来学习和实践的有力支持。

梦想技术家 1103

语音识别:PyAudio、SoundDevice、Vosk、openai-whisper、Argos-Translate、FunASR(Python)

本文介绍了Python中常用的音频处理库PyAudio,详细解析了其核心功能、核心概念和典型工作流程。PyAudio是一个跨平台的音频I/O库,支持音频录制、播放、实时流处理和低延迟操作。核心概念包括PyAudio类(管理音频设备和流)和Stream类(代表音频流)。文章重点讲解了open()方法的关键参数、回调函数的使用方式以及典型的工作流程,包括设备查询、流配置和资源释放。PyAudio适用于需要实时音频处理的场景,如语音识别和音频效果处理。

算法工程师 706

Maven之POM文件build标签详解

Maven中POM文件build标签详解

scorpio的博客 1万+

goahead(嵌入式Web服务器)之openssl 应用篇

1、环境配置 在me.h文件里修改以下宏定义 ME_COM_MBEDTLS 0 ME_COM_MATRIXSSL 0 ME_COM_NANOSSL 0 ME_COM_OPENSSL 1 2、添加 goahead-openssl.c goahead-openssl.c这个文件在有些goahead源码中是没有的,后面的章节中会提供openssl应用测例 3、依赖的库 goahead的openssl 应用需要依赖libssl.a与libcrypto.a(libssl.so与libcrypto.so)两个库,做好

weixin_40732273的博客 2089

Maven之pom.xml文件中的Build配置

Maven之pom.xml文件中的Build配置 前言 在日常的开发中,我们经常使用maven来管理和构建我们的项目,即使现在使用了各种springboot等方便快捷的框架,jar包的引入也是通过maven来进行的,因此有必要了解pom.xml文件中的没一项配置. 正文 mave的相关插件 首先,关于maven我们要有一定的认识: maven能帮我们构建工程,管理jar包,编译代码,还能帮我们自...

剑小纯的夜话白鹭 4万+

Opus Clip AI技术浅析(一)

Opus Clip AI 是一款由Opus公司推出的AI视频剪辑工具,旨在通过人工智能技术简化视频编辑过程,帮助用户快速从长视频中提取精彩片段,并生成适合社交媒体分享的短视频。

m0_75253143的博客 2152

STM32步进电机控制三大方案:GPIO/定时器/PWM深度对比

步进电机控制是嵌入式运动控制的基础技术,其核心在于精确生成脉冲(PUL)、方向(DIR)和使能(EN)三路数字信号。原理上,脉冲频率决定转速,脉冲数量决定位置,方向电平决定转向,而使能时序保障驱动器可靠启停。该技术具有高定位精度、开环稳定性与低成本优势,广泛应用于3D打印机、CNC设备、自动化产线等场景。在STM32平台实现时,需兼顾硬件隔离设计(如6N137光耦)、HAL库抽象封装及实时性约束。本文围绕GPIO模拟、定时器中断与PWM比较输出三种主流方法,系统剖析其时序机制、CPU开销、抗干扰能力与工业适

weixin_35755640的博客 87

Maven的pom.xml文件结构之Build配置build

在Maven的pom.xml文件中,Build配置包含两个部分,一个是,另一个是,这里我们只介绍。 1. 在Maven的pom.xml文件中,存在如下两种: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sc

成长的足迹 9万+

“探索thumbdata4文件的奥秘:编程中的神秘存在“

综上所述,thumbdata4文件在编程中是一个常见的存在,与图库应用程序和图片浏览器密切相关。通过使用适当的库和工具,我们可以读取和处理thumbdata4文件中的缩略图数据,以提供更好的用户体验。我们首先读取8字节的块头,其中包含了下一个缩略图块的大小。你可以根据自己的需求来定义对块数据的处理方式,例如将其保存为图像文件或进行其他的分析操作。thumbdata4文件通常以二进制格式存储,其中包含着设备上浏览过的图片的缩略图。因此,你可能需要根据具体的thumbdata4文件结构进行适当的解析和处理。

JieLun_C的博客 792

Maven pom文件基本结构一

POM文件结构 Project Object Model是Maven2项目的基础所在,简单来说它就是一个XML文件,Maven2用它来描述一个工程的整个生命周期所需要执行的一系列功能和特性。 最小配置 任何项目都最少要包含以下几个标签。 &lt;project&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;group...

fox_bert的博客 3298

YOLOv8+SAM强强联合:用分割“喂“检测,复杂背景下作物AP从72%干到77.7%,杂草误检降60%

目标与背景高度相似:如农业(作物vs杂草)、工业(零件vs台面)、医学(病灶vs正常组织);遮挡严重的场景:如密集人群(人被遮挡)、森林(树木被枝叶遮挡);小目标密集场景:如无人机航拍(远处小目标易混背景)。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 793

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

maven pom.xml 的 build配置、插件plugin的介绍

maven是什么?用通俗的话来将,maven能帮你构建工程,管理jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目。使用maven构建的项目均可以直接使用maven build完成项目的编译测试打包,无需额外配置。

黄彪博客 3006

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Maven中pom文件结构详解

模型版本指定了当前 POM 使用的 Maven 模型版本。对于 Maven 2 和 Maven 3,版本号通常是 4.0.0。2、项目基本信息:项目基本信息包含很多配置标签,其中一些为必填项:groupId: 项目的组ID,在一个组织或者项目中通常是唯一的,定义了项目所属的实际组织的唯一标识符,通常是公司域名的反转。artifactId:项目的基本名称,通常是项目的模块名或 JAR 文件的名称,是项目的唯一标识符。version:项目的版本号。

taohandong1的博客 2256

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

maven 的 pom 文件与打包详解

setting.xml 是全局级别的配置文件,主要用于配置 maven 的运行环境等一系列通用的属性。 pom.xml 是项目级别的配置文件 。 pom 作为项目对象模型。通过 xml 表示 maven 项目,使用 pom.xml 来实现。主要描述了:项目的 maven 坐标、依赖关系、开发者需要遵循的规则、缺陷管理系统、组织和 licenses、项目的 url、项目的依赖性,以及其他所有的项目相关因素。 一、基础配置 <project xmlns="http://maven.apache.org/P

IT__learning的博客 1万+

maven中pom文件build节点讲解

在maven的pom.xml文件中build节点用来管理执行maven声明周期的。主要包含如下内容: <build> <finalName>test</finalName> <filters> <filter>${basedir}/filters/filter-${profile.active}.properties</filter> </filters>

赶路人儿 5399

Maven pom.xml文件中build,plugin标签的具体使用

例如,`maven-compiler-plugin` 插件的 `compile` 目标与 Maven 构建的 `compile` 阶段绑定,因此在执行 `mvn compile` 命令时,编译代码的目标会自动执行。在 `` 标签内还可以使用其他构建相关的配置,例如使用 `` 标签声明项目构建时要使用的 Maven 扩展,或使用 `` 标签指定默认的构建目标等。目标是插件的执行单元,通过在插件配置中指定目标,可以按需执行插件的不同功能。

goTsHgo的博客 1万+

maven之pom中的build标签

针对整个项目的所有情况都有效。

weixin_40482816的博客 3962

Maven的pom.xml文件结构详解

Maven的pom.xml文件简称POM (Project Object Model),是Maven项目的配置和管理核心。 pom.xml文件包含大量配置信息,这些信息大致可以分为4类。 1.POM的模型版本 4.0.0说明:在Maven2和Maven3中,只支持4.0.0版本。 2.基本配置 ... ... ... ... ... ... ...

成长的足迹 1万+

POM文件结构解析

Maven的pom.xml文件简称POM (Project Object Model),是Maven项目的配置和管理核心。 一个简单的pom解析 <?xml version="1.0" encoding="UTF-8"?> <project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "ht...

爱睡觉的小懒虫 6069

Maven项目pom文件之<build>

系转载 在阅读详细文档之前我们先来谈谈我自己对maven的一些个人理解,以助于从整体大局上了解maven。 maven是什么,用通俗的话来将,maven能帮你构建工程,管理jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目 使用maven构建的项目均可以直接使用maven build完成项目的编译测试打包,无需额外配置 Maven是通过pom.xml来执行任务的,其中的build标签描述了如何来编译及打包项目,而具体的编译和打包工作是通过build中配置的 plugin 来完成

programmeruse的博客 5204
上一篇: Maven pom文件基本结构一
下一篇: [Problem] spring MVC JSP页面取不到ModelAndView传递的值
Marvin-Fox
博客等级 码龄11年 190粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值