为 Maven 构建的 Web 应用程序指定运行时配置参数

2023-12-14

我是 Maven 的新手,我想知道是否有一种合理的方法可以在构建时向 Web 应用程序指定配置信息参数。

我的意思如下。使用 Ant,我通常创建一个文件夹(例如配置参数),并在该文件夹中放置一些属性文件或任何其他必要的文件,并为我的应用程序运行的环境提供正确的设置。

例如:

- test.jdbc.properties
- cert.jdbc.properties
- prod.jdbc.properties
- test.log4j.properties
- test.myapplication.properties
- test.web.xml

... ad nauseum

然后,在我的 ant 构建脚本中,我只是从项目.属性文件,它只是指示我想要使用的文件集(test, cert or prod).

这样,当我为已知环境构建应用程序时,我不必担心检查每个可能的框架配置参数。

那么两个问题:

  1. 这是否可以通过 Maven POM 以非 hackish 的方式实现?是否有 Maven 文档、书籍或参考资料涉及应用程序构建的此阶段?

  2. 是否有更明智的方法将我的应用程序构建配置文件针对特定的执行环境(测试、生产等)?我想这个问题可能更容易引起争论,但如果有一种更简单、更优雅的方法来处理这个问题,我洗耳恭听:P。

我感谢您提供的任何帮助。干杯!


我建议的第一件事是将测试环境的配置放入 src/test/resources 中,Maven 可以自动使用它进行测试。生产配置应位于 src/main/resources 中,这意味着在打包和发布过程中将自动使用生产配置。 其他配置目标(如 cert)意味着您需要为不同的环境再次构建应用程序。

您是否通过为不同环境生成工件的 CI 环境进行构建?是的,仅仅基于为每个环境单独构建应用程序的需要,基于配置文件的解决方案并不是一个好的选择。最好只构建一次具有代表不同环境的工件。 让我们从这样的事情开始:

.
|-- pom.xml
`-- src
    |-- main
    |   |-- java
    |   |-- resources
    |   |-- environment
    |   |   |-- test
    |   |   |   `-- database.properties
    |   |   |-- qa
    |   |   |   `-- database.properties
    |   |   `-- production
    |   |       `-- database.properties
    |   `-- webapp

对于每个环境,您都有一个包含不同配置部分(在本例中为属性文件)的文件夹。 您需要 maven- assembly-plugin 的配置文件(适用于每个环境),如下所示:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">

  <id>test</id>
  <formats>
    <format>war</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <unpack>true</unpack>
      <useProjectArtifact>true</useProjectArtifact>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <outputDirectory>WEB-INF</outputDirectory>
      <directory>${basedir}/src/main/environment/test/</directory>
      <includes>
        <include>**</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>

当然,maven-assemble-plugin 的配置如下:

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
      <execution>
        <id>test</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
        <configuration>
          <descriptors>
            <descriptor>${project.basedir}/src/main/assembly/test.xml</descriptor>
          </descriptors>
        </configuration>
      </execution>
      <execution>
        <id>qa</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
        <configuration>
          <descriptors>
            <descriptor>${project.basedir}/src/main/assembly/qa.xml</descriptor>
          </descriptors>
        </configuration>
      </execution>
      <execution>
        <id>production</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
        <configuration>
          <descriptors>
            <descriptor>${project.basedir}/src/main/assembly/production.xml</descriptor>
          </descriptors>
        </configuration>
      </execution>
    </executions>
  </plugin>

结果是只有一个构建,它为每个环境生成一个工件,如下所示:

  1. artifactId-版本-test.war

  2. artifactId-版本-qa.war

  3. artifactId-版本-生产.war

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 Maven 构建的 Web 应用程序指定运行时配置参数 的相关文章

  • Java 比 Xmx 参数消耗更多内存

    我有一个非常简单的 Web 服务器类 基于 Java SEHttpServer class 当我使用此命令启动编译的类来限制内存使用时 java Xmx5m Xss5m Xrs Xint Xbatch Test 现在如果我使用检查内存top
  • 在 Gradle 中运行自定义测试任务而无需重新编译

    我有一个 Gradle 自定义测试任务来运行我的集成测试 我希望能够在 Gradle 不自动完成之前的所有阶段并仅运行测试的情况下运行它 有没有办法在每个构建步骤不使用 x 的情况下执行此操作 None
  • 第一次如何配置postgresql?

    我刚刚安装了 postgresql 并在安装过程中指定了密码 x 当我尝试做的时候createdb并指定我收到消息的任何密码 createdb 无法连接到数据库 postgres 致命 用户密码身份验证失败 同样适用于createuser
  • 如何从球衣服务端点发送实体列表?

    我正在从球衣服务器发送实体列表 在客户端 我试图获取这些实体列表 但它给了元帅例外 为什么它在元素名末尾添加 s 即 emps 而不是 emp XmlRootElement public class Emp Server side code
  • 如何在 Java 中复制对象?

    考虑下面的代码 DummyBean dum new DummyBean dum setDummy foo System out println dum getDummy prints foo DummyBean dumtwo dum Sys
  • 如何确定 JDialog 显示在哪个屏幕上

    我有一个非常大的应用程序 有多个对话框 我的任务是确保不完全可见的对话框 因为用户将其从可见屏幕区域拉出 移回屏幕中心 当我只处理一个屏幕时 这没问题 它工作得很好 但是 该应用程序的大多数用户的桌面上都有两个屏幕 当我尝试找出对话框显示在
  • 使用 Copy.CopyIntoItems Web 服务将文件上传到 SharePoint 2010 时收到 400 错误请求

    SharePoint 新手 我尝试使用 Java 的 CopyIntoItems Web 服务方法将文档上传到 SharePoint 但不断收到 400 错误请求 我使用 Java 的 wsimport 从 wsdl 文件生成类文件 这是我
  • 字符串 a == 字符串 b 的规则 [重复]

    这个问题在这里已经有答案了 我试图了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是什么 例如这个片段 public static void main String hi String s1 lol String s2 lol S
  • 覆盖乔达一周的第一天?

    是否有可能覆盖乔达弱的第一天sunday 因为 Joda 使用Monday作为一周的第一天 如果有办法的话 谁能解释一下 我在 SOF 中提到了以下主题 乔达时间 一周的第一天 https stackoverflow com questio
  • 如何在不冒 StackOverflowError 风险的情况下使用 CompletableFuture?

    我想遍历异步函数的搜索空间 我将逻辑编码如下 Assuming that a function maps a range of inputs to the same output value minimizes the input valu
  • java多线程中“私有最终对象”锁定有什么用?

    java多线程中 私有最终对象 锁定有什么用 据我的理解 我认为要使一个类成为线程安全的 我们应该使用内部锁定 将所有方法标记为同步并使用 this 将它们锁定在对象的监视器上 或者我们可以用方法中的私有最终对象锁替换类的 this 上标记
  • SFTP Java - 管道关闭 Jsch 异常

    我正在研究一种 java 方法 将文件从一个位置复制到另一个远程位置 我的代码如下 我尝试使用jsch 0 1 42 0 1 50 0 1 54 public static void processFiles ArrayList
  • 在 Hibernate 的 XML 配置文件中指定默认值

    我通过映射配置文件配置 Hibernate
  • 将序列化数据发送到 servlet 时出现 java.io.EOFException

    我正在尝试从 Java 本地应用程序上传一个包含文件到服务器的对象 我的计划是 在 tomcat 上运行的 servlet 将使用以下方法获取对象ObjectInputStream in the doGet方法 但我得到一个EOFExcep
  • 在Android项目中引用(纯java)项目(找不到类)

    我试图在我的 Android 项目中引用一个纯 java 项目 gt Java 项目有一大堆我需要使用的类 哦 正如第一个回复所指出的 我正在使用 eclipse 是的 唯一的问题是 我总是找不到类 XXX 从方法 com example
  • jasper 报告文件中出现错误

    首先 我在 iReport 5 1 0 中创建一个 R D1 jrxml 文件 我执行该报告的 Java 代码如下所示 import java sql Connection import java sql DriverManager imp
  • 如何预先填充 JFileChooser 将“文件名”?

    我打算用数据库中的名称填充 JFileChooser 但使用标准 JFileChooser 对话框进行加载 删除 保存和另存为 我想给用户留下这样的印象 他们正在处理文件系统 而在后端使用数据库来保存更改 用户不应该能够浏览到不同的目录进行
  • Java无损保存原始JPEG

    如下所示 我有第一张图像是原始 JPEG 图像 第二张图像用于缓冲图像 然后使用保存http www lac inpe br JIPCookbook 6040 howto compressimages jsp http www lac in
  • 使用替换但不使用根元素的 Jaxb 继承

    我正在浏览布莱斯的博客http blog bdoughan com 2010 11 jaxb and inheritance using substitution html http blog bdoughan com 2010 11 ja
  • Spring Boot 2 中的 401 代替 403

    With 春季启动 https projects spring io spring boot 1 5 6 发布我能够发送 HTTP 状态代码401代替403如中所述如果请求未经身份验证的uri 如何让Spring Security响应未经授

随机推荐

  • UIImage 到 UIColor 像素颜色数组

    我很抱歉问这个问题 但我不知道如何将 UIImage 表示为每个像素的 UIColor 数组 我已尽最大努力进行转换UIImagePNG JPEGRepresentation但无法得到想要的结果 这是一个 Swiftier 版本 Swift
  • 登录功能还是使用它的功能?

    Is it best 我知道没有灵丹妙药 但使用其中一种可能比另一种有一些优势 登录调用函数或调用它的函数 例子 方法一 module MongoDb let tryGetServer connectionString try let se
  • 将值从活动传递到广播接收器并从广播接收器启动服务

    我有一个活动 它包含一个按钮 其文本会动态更改 我想将此文本传递给接收短信的广播接收器 现在我的广播接收器应该接收文本 并根据文本启动或停止服务 这个怎么做 如果您的 BroadcastReceiver 是在单独的类文件中定义的 那么您可以
  • OpenAPI 和 spring-doc 未找到控制器类中的所有映射

    这有点奇怪 springdoc openapi ui v1 2 32 生成的文档仅包含控制器内的一些映射 Example Operation summary Foo description Foo PostMapping path v1 f
  • React.js - 兄弟组件之间的通信

    我是 React 新手 我想问一个策略问题 关于如何最好地完成必须在同级组件之间通信数据的任务 首先 我将描述一下任务 说我有多个
  • 如果并行任务抛出异常则取消任务

    我有两个共享相同取消令牌的并行任务 客户端要求两个结果列表 例如 class ResponseDTO public IEnumerable
  • 提高接近于零的值的色阶分辨率

    我想让这个图中的小回报更加明显 最合适的功能似乎是scale colour gradient2 但这会冲掉最常发生的小额回报 使用limits有帮助 但我无法弄清楚如何设置 oob 越界 因此它只会有一个 饱和 值而不是灰色 对数变换只是让
  • unixODBC PHP更新语句错误

    我使用 Ubuntu php unixodbc mdbtools 来处理 mdb 文件 每件事 连接 选择 都工作得很好 但插入或更新语句 我的代码是这样的 mdbConnection new PDO odbc mdbdriver user
  • Kendo Grid:与 Angular 一起使用时如何从组合框单元模板中获取所选项目

    我有一个在 Angular 中使用的 Kendo 网格 并且有一个带有组合框的字段 该字段将编辑器设置为以下功能 function comboCellTemplate container options var input
  • 回显所有回文,C 语言

    我喜欢 Brian Kernighan 和 Rob Pike 的书 UNIX 编程环境 中提出的想法 他们重点关注在可以在命令行上组合许多 小型 精确 易于理解的 程序的环境中工作的点来完成许多编程任务 我正在温习严格的 ANSI C 约定
  • 从文件中提取特定行并在 python 中创建数据部分

    尝试编写一个 python 脚本来从文件中提取行 该文件是一个文本文件 是 python suds 输出的转储 我想要 删除除单词和数字之外的所有字符 我不需要任何 n 等字符 找到以 ArrayOf xsd string 开头的部分 从结
  • Windows 服务与简单程序

    在讨论我的问题之前 让我先为大家介绍一下背景 我的公司为许多客户托管网站 我的公司也将一些工作外包给另一家公司 因此 当我们第一次建立一个向客户提供所有信息的网站时 我们将该信息传递给我们签约的另一家公司 并且我们三个人拥有相同的数据 问题
  • 您会向新手推荐哪本 ASP.NET 书籍? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想学习 ASP NET 只是想了解一下该读哪本书 我发现 WROX 的书很有用 虽然封面很蹩脚 开始 ASP NET 3 5 使用 C 和 VB
  • PDO连接测试

    我正在为我的一个应用程序编写安装程序 我希望能够测试一些默认数据库设置 是否可以使用 PDO 来测试有效和无效的数据库连接 我有以下代码 try dbh new pdo mysql host 127 0 0 1 3308 dbname ax
  • 使用 Java New I/O 读取行

    使用 New I O 从文件中读取行的最佳方法是什么 我一次只能获取一个字节 任何想法 或者对于小文件 您可以这样做 List
  • 尝试像集合和子集一样对待类型类和子类型

    这个问题与我之前的SO问题有关类型类 我问这个问题是为了设置一个有关语言环境的未来问题 我不认为类型类适合我想要做的事情 但是类型类的工作方式让我了解了我想要从语言环境中得到什么 下面 当我使用大括号表示法时 0 0 它不代表普通的 HOL
  • 无法将预期类型 [a0] 与实际类型 IO () 匹配

    我的代码有什么问题 insertValue file x if x 10 then ok else do putStrLn Error file In an if then else表达式 两个分支必须具有相同的类型 其中一个分支是 10
  • 使用 Perl、Python 或 Ruby,如何编写一个程序在预定的时间“点击”屏幕?

    使用 Perl Python 或 Ruby 我可以编写一个程序 可能调用 Win32 API 在预定时间 例如每 1 小时 单击 屏幕吗 Details 这是为了实验 点击对 Flash 内容以及屏幕上的任何元素都有效吗 如果程序能够记录屏
  • 将 ConsumerRebalanceListener 添加到 ConcurrentKafkaListenerContainerFactory

    在 Spring Boot 应用程序中 我使用一个带有 KafkaListener 注释的类作为消息侦听器 我想向我的应用程序添加 ConsumerRebalanceLister 以管理重新平衡时的缓存数据 如何将 ConsumerReba
  • 为 Maven 构建的 Web 应用程序指定运行时配置参数

    我是 Maven 的新手 我想知道是否有一种合理的方法可以在构建时向 Web 应用程序指定配置信息参数 我的意思如下 使用 Ant 我通常创建一个文件夹 例如配置参数 并在该文件夹中放置一些属性文件或任何其他必要的文件 并为我的应用程序运行