如何根据正在执行的目标激活配置文件
Posted
技术标签:
【中文标题】如何根据正在执行的目标激活配置文件【英文标题】:How to activate profile based on goal being executed 【发布时间】:2013-04-04 13:21:15 【问题描述】:当我从命令行执行某些目标时,我想“自动”激活配置文件。
例如我现在在做什么:
mvn appengine:devserver -Pdevelopment
mvn appengine:update -Pproduction
基本上,我想在运行 devserver 目标时自动激活开发配置文件。 当我运行更新目标时,我想要激活的生产配置文件也是如此(除非使用 -P 选项显式覆盖)。
这可能吗?
【问题讨论】:
【参考方案1】:我同意之前的结论,你不能这样做。之前看到的推理可能有点落后。
插件是通过在命令行上定义目标来激活的(在这个问题的特定情况下),而不是插件在配置文件中。
您尝试以这种方式覆盖的可能是插件默认配置 (plugin.configuration
),而不是特定执行的配置 (plugin.executions.execution.configuration
)。我很好。但是泡菜是为了激活配置文件。
如果您在命令行上的所有内容都是目标(例如appengine:update
),那么不可能使用activate a profile。
当您阅读有关profile activation 的讨论时(正如我过去经常做的那样),您会发现很多人在激活个人资料方面仍有很多需要。根据执行的目标激活配置文件甚至不是我遇到的愿望——只是说:不要抱太大希望。
您可能还想知道您正在尝试做的事情是否真的合适。您是否真的需要制定目标,或者您还能以某种方式从Maven lifecycle 中受益?
Maven 生命周期实际上是一条通向完成的(直接)路径,贯穿各个阶段。如果您想根据某些条件转移此路径,则配置文件是要走的路。如果 appengine:update
和 appengine:devserver
是“非此即彼”(我相信它们是),那么您正在转移路径,应该使用配置文件,真的,并且最终仍然会在您的命令行上至少有两件事,即相位和所需的轮廓。如果有一个典型情况和一个例外情况,您可以分别表示默认配置文件激活 (activeByDefault
) 和明确选择另一个配置文件 (-P
):
mvn deploy // choose default profiles
mvn deploy -Pproduction // ignore default profiles
如果您想要同时执行这两项操作(例如,在集成测试阶段使用devserver
,在部署期间使用update
),可以通过随后与phase
绑定的插件executions
将生命周期配置为这样做。您只需在命令行中添加一件事,即阶段。
【讨论】:
桑德,也许我可以,例如在部署生命周期内运行 appengine:update。但它有什么不同呢?配置文件可以根据生命周期激活吗? @MarcelOverdijk,我已经更新了我的答案并添加了关于使用生命周期的进一步解释。希望对您有所帮助。 抱歉挖了这么老的帖子,我也在找这个。我的建议是:如果 Maven 将执行的目标作为属性公开,我们可以基于它激活配置文件。所以,对于mvn deploy
,它可能看起来像<activation><property><name>$maven.lifecycle</name><value>deploy</value></property></activation>
一个有趣的用例可能是例如当目标是 spring-boot:run 时声明一个 spring-boot.run.profile =local_environment【参考方案2】:
Maven Model 告诉我们the profile 由各种元素组成,包括build。如下例:-
<profile>
<id></id>
...
<build>
<plugins>
<plugin></plugin>
...
</plugins>
</build>
</profile>
正如我们在上面看到的,profile
控制着plugin
。那么你的问题的答案是否定的。我们不能让plugin
激活profile
。
我希望这会有所帮助。
【讨论】:
是的,我想是这样,但想检查是否有一些解决方法。以上是关于如何根据正在执行的目标激活配置文件的主要内容,如果未能解决你的问题,请参考以下文章
使用文件存在忽略我的 Maven 配置文件中的激活(始终执行配置文件)
根据 logback-spring.xml 中的 springProfiles[dev, stg, prod] ,如何激活命令行中传递的相应 spring 配置文件