【问题标题】:Maven build process/deployment & properties at runtimeMaven 在运行时构建过程/部署和属性
【发布时间】:2016-01-22 17:09:00
【问题描述】:

我有一个带有 maven 和一些属性的 vaadin 项目。 属性包括文件路径、文件名等。

我还为开发和生产创建了 Maven 配置文件。 对于开发,我的应用程序使用 jetty 运行,在生产中它应该使用 tomcat 8 运行。(我的目标是 .WAR 文件)

到目前为止一切正常,但现在我需要为生产构建做准备并“上线”。所以我需要创建不同的属性,一个用于开发,一个用于生产。

但是应用程序需要根据环境加载正确的属性,对吗?所以如果本地机器使用属性a,否则使用属性B。

在这种情况下,最佳做法是什么? 我应该如何处理我的属性和 pom 文件? 构建过程应该是怎样的?

希望我能解释清楚,否则我会分享更多信息。

任何想法都会有所帮助。 非常感谢。

附言。抱歉,这是我的第一个生产版本!!!

【问题讨论】:

    标签: java maven deployment maven-2 build-process


    【解决方案1】:

    最好的方法是以.properties 文件或类似格式将您的配置外部化到您的WAR 文件之外,然后让您的应用程序在引导时获取此类文件。发现配置文件的常用方法有:

    • 应用程序 CLASSPATH 中的预定义位置
    • 文件系统上的预定义位置
    • 由启动参数指定的位置(CLASSPATH 或 FS)(例如:-Dmyapp.config=...
    • 指向正确位置的 JNDI 环境属性
    • 以上所有内容,以chain of responsibility 的方式进行

    根据您的部署模型,将属性保留在 pom.xml 中可能不方便,因为您通常不希望生产数据库密码在那里,或者在你的源代码中的任何地方。

    本地环境的属性确实可以放在pom.xml 中,然后您也可以使用filtering 用它们填充属性文件并从您的应用程序中加载此类文件。相同的方法可以与profiles 一起使用,以针对多个环境。

    然后,如果您需要为您使用的所有环境配置正确的属性(例如,如果您要推出完整的 DTAP 街道),我建议您查看一些配置器/配置管理器比如AnsibleSaltChefPuppet等等。

    【讨论】:

    • 我的应用程序没有数据库,所以没有用户名/密码。我不确定我是否理解您关于外部化属性的建议。我已经有不同的 .properties 文件。你是这个意思吗? ——
    • 是的,你没有提到你的配置在pom.xml之外,所以我认为提到外部属性文件是合适的。然后,我建议您的 build 进程不应该负责为本地以外的环境生成属性。
    【解决方案2】:

    使用Maven Resource Plugin,您可以根据活动配置文件包含/排除资源。

    或者您可以使用Maven Assembly Plugin 将其作为打包过程的一部分

    【讨论】:

      猜你喜欢
      • 2010-12-04
      • 2012-08-13
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-15
      • 2011-12-23
      相关资源
      最近更新 更多