【问题标题】:How can I disable Maven install and deploy phases using profiles?如何使用配置文件禁用 Maven 安装和部署阶段?
【发布时间】:2011-10-03 19:24:21
【问题描述】:

我的 Maven 项目包含 3 个不同的配置文件,dev、stage 和 prod,它们包含不同的配置设置。如果活动配置文件不是 prod,我想使安装和部署阶段无法执行(或执行但不执行任何操作),以保持开发和阶段构建在存储库之外。有没有办法做到这一点?

我猜这涉及到将 添加到 dev 和 stage 配置文件并手动将其绑定到“none”阶段或类似的东西。

【问题讨论】:

    标签: java maven-2 build


    【解决方案1】:

    如果这是您真正想要做的,那么只需在 dev 和 staging 上运行“包”阶段,在您的 maven 设置文件中,提供的用户不应该对存储库具有写入权限。

    不过,我建议您将配置文件保留在构建工件之外,这样您就只有一个构建可以在环境之间升级。作为部署构建脚本的一部分,您可以自动复制正确的设置,获得类似的效果。

    【讨论】:

      【解决方案2】:

      无论您想要如何这样做是最好的主意,您可以做的是使用Maven Enforcer Plugin 来验证profile 属性是否设置为您的'产品简介。该插件默认绑定到validate 阶段,因此您需要将其绑定到package 阶段,否则只有“prod”配置文件可用。

      我将使用的具体配方:

      有一个名为requireProperty 的内置规则可用于对属性及其值进行断言。您可以从您的 prod 配置文件中设置一个属性,然后(在任何配置文件之外)配置执行器插件以检查该属性是否设置为您期望的值。然而,这是胡扯。

      我强烈建议您将特定于环境的配置值外部化到属性占位符中,并仅使用配置文件来设置这些值,而不是切换出特定于环境的配置文件或影响您正在生成的工件的内容。

      【讨论】:

      • 事实上,我只是使用配置文件来设置占位符。每个配置文件定义一个 $env 变量。然后在父 POM 中我设置了一个过滤器,引用过滤器-${env}.properties。因此,所有配置信息都集中在这些文件中,每个环境一个。但是,这并不能阻止某人进行 mvn -Pdev deploy 并使用 dev 配置的工件污染 repo,这就是我要解决的问题。
      • 你能把我的建议和你的环境变量一起使用吗?
      • 是的,我想我可以,现在正在解决这个问题。从长远来看,我同意我需要找到一种不那么笨拙的方法来实现这一点,但这会让我通过 sprint。谢谢!
      • 我最终只是将强制插件添加到我不希望能够使用 AlwaysFail 规则安装或部署的配置文件中,并带有一条很好的消息来解释事情。感谢您的帮助!
      猜你喜欢
      • 1970-01-01
      • 2021-11-08
      • 2013-05-18
      • 2011-06-07
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      相关资源
      最近更新 更多