【发布时间】:2011-10-03 19:24:21
【问题描述】:
我的 Maven 项目包含 3 个不同的配置文件,dev、stage 和 prod,它们包含不同的配置设置。如果活动配置文件不是 prod,我想使安装和部署阶段无法执行(或执行但不执行任何操作),以保持开发和阶段构建在存储库之外。有没有办法做到这一点?
我猜这涉及到将
【问题讨论】:
我的 Maven 项目包含 3 个不同的配置文件,dev、stage 和 prod,它们包含不同的配置设置。如果活动配置文件不是 prod,我想使安装和部署阶段无法执行(或执行但不执行任何操作),以保持开发和阶段构建在存储库之外。有没有办法做到这一点?
我猜这涉及到将
【问题讨论】:
如果这是您真正想要做的,那么只需在 dev 和 staging 上运行“包”阶段,在您的 maven 设置文件中,提供的用户不应该对存储库具有写入权限。
不过,我建议您将配置文件保留在构建工件之外,这样您就只有一个构建可以在环境之间升级。作为部署构建脚本的一部分,您可以自动复制正确的设置,获得类似的效果。
【讨论】:
无论您想要如何这样做是最好的主意,您可以做的是使用Maven Enforcer Plugin 来验证profile 属性是否设置为您的'产品简介。该插件默认绑定到validate 阶段,因此您需要将其绑定到package 阶段,否则只有“prod”配置文件可用。
我将使用的具体配方:
有一个名为requireProperty 的内置规则可用于对属性及其值进行断言。您可以从您的 prod 配置文件中设置一个属性,然后(在任何配置文件之外)配置执行器插件以检查该属性是否设置为您期望的值。然而,这是胡扯。
我强烈建议您将特定于环境的配置值外部化到属性占位符中,并仅使用配置文件来设置这些值,而不是切换出特定于环境的配置文件或影响您正在生成的工件的内容。
【讨论】: