Maven 不同环境灵活构建

Jenkins多版本JDK/Maven实战:如何为不同项目灵活切换构建环境? 本文详细介绍了在Jenkins中如何为不同项目灵活配置和切换多版本JDK/Maven构建环境。通过全局工具配置、Job级设置和Pipeline动态切换等技术方案,解决企业级持续集成中的版本冲突问题,并提供最佳实践与优化建议,帮助团队高效管理复杂构建环境。 阅读详情

需求:
使用 Maven根据不同的构建环境(如开发、测试、生产)来定义不同的配置,实现灵活的构建管理。
需要Demo项目的可以参考:我的demo项目

一、项目分层

一般的初创项目不会有特别多的配置文件,所以使用 spring.profiles.active就可以满足需求,但伴随项目规模扩大,引入的依赖/中间件越多,配置文件越多,仅仅靠单一的文件无法满足,可以参考下面的结构:

├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── github
│   │   └── resources
│   │       ├── resources-env
│   │       │   ├── dev
│   │       │   └── prod
│   │       └── static

1. 使用 Maven 配置不同环境

在 Maven 中,<profiles> 是一个非常强大的功能,它允许你根据不同的构建环境(如开发、测试、生产)来定义不同的配置。在 pom.xml 文件中使用 <profiles>,可以对插件、依赖、属性等进行差异化配置,进而实现灵活的构建管理。

1.1 配置不同的环境

pom.xml配置如下:

<profiles>
  <!-- 本地开发 -->
  <profile>
    <id>dev</id>
    <properties>
      <env>dev</env>
    </properties>
    <activation>
      <activeByDefault>true</activeByDefault> <!-- 默认使用 dev -->
    </activation>
  </profile>
  <!-- 测试 -->
  <profile>
    <id>test</id>
    <properties>
      <env>test</env>
    </properties>
  </profile>
  <!-- 预发 -->
  <profile>
    <id>pre</id>
    <properties>
      <env>pre</env>
    </properties>
  </profile>
  <!-- 生产 -->
  <profile>
    <id>prod</id>
    <properties>
      <env>prod</env>
    </properties>
  </profile>
</profiles>

1.2 配置构建信息

pom.xml文件如下:

 <build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/resources/resources-env/${env}</directory>
            <filtering>true</filtering> <!-- 启用资源过滤 -->
        </resource>
    </resources>

   
    <plugins>
      <!--     spring 配置文件可以使用占位符读取pom.xml中的变量 例如 @env@       -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.2.0</version>
            <configuration>
                <delimiters>
                    <delimiter>@</delimiter>
                </delimiters>
                <useDefaultDelimiters>false</useDefaultDelimiters>
            </configuration>
        </plugin>
    </plugins>

 </build>

1.3 Spring 配置文件激活不同环境的配置文件

application.properties 文件配置如下:

spring.profiles.active=@env@

1.4 构建项目

命令参考:

mvn clean package -Pprod

二、可能遇到的问题

2.1 IDEA直接启动项目,读取不到环境配置文件

项目环境变量设置有问题。

解决方法:
IDEA 操作 File -> Project Structure -> Modules 设置 Resources 就可以了

在这里插入图片描述

2.2 启动项目,报错:IOException: DerInputStream.getLength()

错误原因是因为 <filtering>true</filtering> 会进行文件过滤,非纯文本文件(例如.p12二进制文件)需要进一步配置。

参考:解决方案

2.3 Maven 打包缺少环境配置文件

Spring 项目配置文件位置:

  • 默认 src/main/resources 目录下的文件
  • config 子目录下的配置文件

打包时需要进一步处理。

参考:解决方案

三、进一步优化

3.1 缩小应用jar包的体积

伴随项目依赖越来越大,应用jar包的体积会越来越大,可以进一步优化。

参考:优化依赖打包

飞腾E2000单板移植openEuler 5.10内核与麒麟系统的实践指南 本文详细介绍了在飞腾E2000单板上移植openEuler 5.10内核并搭配麒麟系统根文件系统的完整实践指南。内容涵盖从编译环境搭建、内核配置裁剪、设备树适配,到根文件系统准备、U-Boot引导配置及启动调试的全流程,旨在帮助开发者打造一个内核版本新、软件生态全的稳定混合系统。 阅读详情

相关推荐

告别激活烦恼:Lattice Diamond 3.13 永久免费License申请与配置全攻略(Windows 64位)

本文详细介绍了Lattice Diamond 3.13永久免费License的申请与配置全流程,特别针对Windows 64位系统用户。从官网导航的隐藏路径到Host ID的获取方式,再到License文件的高级处理技巧和环境变量的深度配置,提供了全面的安装教程和疑难问题解决方案,帮助开发者彻底告别激活烦恼。

weixin_28736335的博客 422

Maven 区分开发环境和测试环境配置两种方式

项目开发过程中,如果一个项目经常发布,那么在打包之前会不断的修改配置文件,这无疑是很麻烦的一件事情。今天我介绍下这个问题怎么解决。       注意:本配置的前提是项目必须是MAVEN项目。 方法一:(过滤方式) 目录结构: 第一步、创建配置文件            在项目的src/main/filter目录下创建 development.properties

sunxiakun的博客 6798

绕线机的制作与研究

本文详细阐述了绕线机的制作过程,涵盖从设计规划到实际制作的各个环节。通过对绕线机工作原理的深入分析,确定了关键技术参数,并依此完成机械结构与控制系统的设计。在制作阶段,运用多种加工工艺完成零件制造与设备组装。经测试,自制绕线机性能达到预期,能够满足特定线圈绕制需求,为相关领域的生产实践与技术研究提供了参考。

道亦无名 1436

[转]Maven 区分开发环境和测试环境配置两种方式

Maven 区分开发环境和测试环境配置两种方式方法一:(过滤方式)第一步、创建配置文件第二步:配置需要读取的配置文件第三步:配置MAVEN 的 pom.xml文件第四 步:打包方法二:(选择打包方式) == 作者:sunxiakun 原文:https://blog.youkuaiyun.com/sunxiakun/article/details/65444744 == 项目开发过程中,如果一个项目经常发布,...

feiniu5566的专栏 1460

RK3588 EVB开发板原理图讲解【六】

该原理图展示了eMMC Flash与主控芯片之间的连接关系,以及相关的电源、信号线路和去耦电容等。

weixin_48721556的博客 1165

node运行项目-Network: unavailable-没有ip地址

vscode运行vue项目后发现Network: unavailable 是什么情况呢?可能有一下三种情况:1.多个网卡原因:打开网络共享中心,把多余的网络禁用掉,只留一个2.在中配置host及public3.系统环境变量问题。

JackieDYH的博客 7538

Maven 使用profile来区分开发、测试、生产环境

Maven允许用户提供自定义的Profile(配置集)来应对在不同场景下配置不同的问题。这样做的好处是将配置做隔离,在打包时,只需要选中的Profile package就行。实现方式是结合Maven的过滤器来处理占位符的替换 来看XML配置 dev dev

Difffate的技术随笔 1812

030、自动白平衡AWB实战:灰度世界、完美反射与色温估计的工程实现与局限

本文深入探讨了自动白平衡(AWB)算法在工程实践中的实现与局限性。作者结合实际项目经验,分析了灰度世界算法、完美反射算法和色温估计三种主流方法的优缺点和适用场景,并分享了调试过程中的关键技巧和常见陷阱。文章指出,纯色背景、多光源环境等特殊场景容易导致算法失效,需要通过混合策略和场景检测来优化。作者强调AWB调试需要大量实际场景测试,建议保留手动调节功能,并针对不同硬件配置进行参数标定。最后提出,AWB优化是一个持续迭代的过程,需要工程化的测试方法和数据处理能力。

zzfmlxs的博客 281

maven 如何实现分环境

maven 如何实现分环境 spring: profiles: active: '@active-profile@' #spring: # profiles: # active: pro #test: # msg: sds #profiles: # active: @profiles.active@ --- spring: profiles: dev config: path: /dev/jdbc.properties --- spring: profile

qq_37401609的博客 337

QLineEdit控件: 实现IP地址输入框(基于编辑信号)

在开发网络应用程序时,经常需要用户输入IP地址。直接使用普通输入框容易导致格式错误,用户体验也较差。本文将手把手教你用Qt的QLineEdit控件实现一个智能IP地址输入框。即使你是刚接触Qt的新手,也能通过本文理解核心实现原理。

u011186532的专栏 649

Weibull Distribution韦布尔分布的深入详述(1)原理和公式

本章介绍韦布尔分布(weibull distribution)和实践之基本公式和推导。 韦伯分布被经常用来对失效性(Failure)或者,反而言之为,可靠性,进行衡量的工具。他的目标就是构建一个失效性分析的模型,或者说构建一个失效性分析的Pattern.【Franklin案,在展示CDF公式的之前,不得不提我们的国内的某些度知识里面的公式,采用的希腊字母完全和国外的不同,然而,很多希腊字母在使用中有特定的意义,本文采用的是通用的表达公式】 F(x)={1−e−(xλ)kx≥00x..............

山云的专栏 8万+

maven分环境部署

maven实现分环境打包部署由于开发环境、测试环境和生产环境配置不同的情况,可能在程序猿打包时总是需要修改配置文件或代码,针对这种情况,maven分环境部署就变得十分有必要了。针对maven项目,要使用Jenkins分环境部署,maven项目配置流程如下: 第一步:将环境不同的配置抽取变量放入配置文件 在src/java/resource中增加环境配置文件夹,例如:dev、test、pro如图:

fengyujiancheng_93的博客 445

HBV模型

据说mHM模型也是基于HBV模型原理。 网上不同版本的HBV模型稍有差别 def hbv_main(n_days, params, air_temp, prec, dpem): #n_days 模拟天数 #air_temp 每月温度 #prec 降水 #dpem 每月蒸发 Tsnow_thresh = 0.0 ca = 410. # Initialize arrays for the simiulation snow = np.zeros(air_temp.size

m0_46268055的博客 2326

maven九 多环境构建

上面我们介绍了b2b-account-service不同环境的构建操作,是在pom.xml中进行配置的,b2b-order-service中数据的配置也可以这么做,如果以后有更多的模块都需要连接不同的数据库,是不是每个模块中都需要配置这样的pom.xml,那时候数据库的配置分散在几十个pom.xml文件中,如果运维需要修改数据库的配置的时候,需要去每个模块中去修改pom.xml中的属性,这种操作会让人疯掉的,我们可以怎么做?还是那句话,上面这些用法大家会经常用到的,建议大家下去了多练练。

weixin_39180662的博客 439

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

maven 灵活构建

灵活构建  项目的构建根据不同的情况可能需要有一定的差异,比如编译级别、依赖、打包的属性文件等在不同的运行环境中可能需要有不同的值。为了实现灵活构建,Maven内置了三个特性: 属性:在POM中通过${属性名称}引用构建时的属性值,从而达到灵活构建的目的,主要有六种属性,包括内置属性、POM属性、自定义属性、setting属性、Java系统属性、 环境变量属性。 属性替换可以在pom.xml和...

weixin_30677073的博客 147

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Maven实战-灵活的构建

Maven灵活的构建,包括 Maven属性、资源过滤 以及 Profile

weixin_37799575的博客 1087

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

《Maven实战》--- 灵活的构建

一个优秀的构建系统必须足够灵活,它应该能够让项目在不同的环境下都能成功地构建,例如,典型的项目都会开发环境,测试环境和产品环境,这些环境的数据库配置不尽相同。 maven为了支持构建的灵活性,内置了三大特性,即属性,Profile和资源过滤   1. maven属性 maven有6类属性 内置属性:主要有两个常用的内置属性,${basedir}表示项目根目录,即包含pom.xml文件的目...

Aaron_涛 564

Maven:灵活构建

在项目开发中,我们会涉及到不同的环境,如开发、测试、集成和发布环境。因此在不同的环境上我们要灵活切换,如连接不同的数据库。Maven为了支持灵活的构建,内置了三大特性:属性、Profile和资源过滤。下面就结合不同版本jdk,不同环境数据进行介绍如何实现灵活的构建。

1024工场 1096

Maven 资源过滤相关

关于灵活的构建 一个优秀的构建系统必须足够灵活,它应该能够让项目在不同的环境下都能成功地构建。 例如,典型的项目都会有开发环境、测试环境和产品环境,这些环境的数据库配置不尽相同,那么项目构建的时候就需要能够识别所在的环境并使用正确的配置 还有一种常见的情况是,项目开发了大量的集成测试,这...

chiqulao5770的博客 137

【Maven教程】(十三):灵活的构建—— Maven 属性、构建环境的差异与资源过滤、Maven Profile、Web 资源过滤 ~

项目构建过程中一个常常需要面对的问题就是不同的平台环境差异,这可能是操作系统的差异、开发平台和测试平台的差异、不同客户之间的差异。为了应对这些差异, Maven 提供了属性、资源过滤以及profile 三大特性。Maven 用户可以在 POM 和资源文件中使用 Maven属性表示那些可能变化的量,通过不同profile 中的属性值和资源过滤特性为不同环境执行不同的构建。

Technology changes the world of life 1875

《Maven实战》笔记-10-灵活的构建

一、灵活构建的意义 一个优秀的构建系统必须足够灵活,它应该能够让项目在不同的环境下都能成功地构建。例如,典型的项目都会有开发环境、测试环境和产品环境,这些环境的数据库配置不尽相同,那么项目构建的时候就需要能够识别所在的环境并使用正确的配置。 还有一种常见的情况是,项目开发了大量的集成测试,这此测试运行起来非常耗时,不适合在每次构建项目的时候都运行。因此需要一种手段能让我们在特定的时候才激活...

weixin_30911809的博客 82

Maven构建配置文件

1.Profile Profile 在 pom.xml 中使用 activeProfiles / profiles 元素指定,并且可以用很多方式触发。Profile 在构建时修改 POM,并且为变量设置不同的目标环境。 2.Profile类型 Profile 主要有三种类型。 ...

chunciqin6314的博客 161

maven学习日志之六 Maven项目的灵活构建

1,项目的灵活构建的意义 一个优秀的项目必须足够灵活,项目可能会经历开发环境、测试环境和产品环境,这些环境的配置不尽相同,那么项目构建的时候就需要识别所在的环境并使用正确的配置。还有一种情况,项目在开发阶段集成了大量的测试,这些测试运行起来非常耗时,不适合每次构建项目的时候都运行,因此需要一种手段让我们在特定的时候才激活这些集成测试。Maven为了支持构建的灵活性,支持了三大特性,即属性、Pro

xuqiaobo的博客 810

深入理解maven与应用(二):灵活的构建

深入理解maven及应用(一):生命周期和插件 参考官方url:http://maven.apache.org/guides/index.html  一个优秀的构建系统必须足够灵活,应该能够让项目在不同的环境下都能成功构建。maven为了支持构建的灵活性,内置了三大特性,即:属性、profile和资源过滤。 1、maven属性  maven属性分6类:     1、内置属性:

xiao_jun_0820的专栏 599

Maven为本地、测试、生产等不同的环境打包

大家在项目开发中经常碰到这样的情况,每个项目都会有多套运行环境,比如开发环境、测试环境、生产环境等,不同的环境对应的配置也不尽相同,比如说数据库连接、文件路径、WebServices address等。     不同环境下需要构建不同的包,那么我们可以通过以下两种方式来解决: 一、定义多个pom,使用-f 指定 比如定义如下pom: pom_dev.xml (default) pom_q

木头若愚 2409

超详细!Spring Boot项目结合Maven Profile实现多环境切换,轻松搞定开发部署难题

Spring Boot Profile 是一种配置机制,它允许我们在同一个应用程序中针对不同的环境(如开发、测试和生产环境)设置不同的配置。这意味着我们可以根据环境的需求,灵活地加载特定的配置,让应用程序在不同环境下都能完美运行。这些配置通常存储在以application-{profile}.yml或application-{profile}.properties命名的文件中,比如application-dev.yml就是专门用于开发环境的配置文件。

kingwinstar的博客 1389
上一篇: Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=111, too big.
下一篇: Spring 配置文件动态读取pom.xml中的属性
知楠行易
博客等级 码龄9年 320粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值