8

当我从命令行执行某些目标时,我想“自动”激活配置文件。

例如我现在在做什么:

mvn appengine:devserver -Pdevelopment

mvn appengine:update -Pproduction

基本上我想在运行 devserver 目标时自动激活开发配置文件。我在运行更新目标时想要激活的生产配置文件也是如此(除非使用 -P 选项显式覆盖)。

这可能吗?

4

2 回答 2

6

Maven 模型告诉我们,配置文件由各种元素组成,包括build。如下例:-

<profile>
    <id></id>
    ...
    <build>
        <plugins>
           <plugin></plugin>
           ...
        </plugins>
    </build>
</profile>

正如我们在上面看到的,profile控制plugin. 那么你的问题的答案是否定的。我们不能让plugin激活profile

我希望这可能会有所帮助。

于 2013-04-12T07:28:59.720 回答
3

我同意前面的结论,你不能这样做。之前看到的推理可能有点落后。

通过在命令行上定义目标(在这个问题的特定情况下)来激活插件,而不是通过配置文件中的插件来激活。

您尝试以这种方式覆盖的可能是插件默认配置 ( plugin.configuration),而不是特定执行的配置 ( plugin.executions.execution.configuration)。我很好。但是泡菜是为了激活配置文件。

如果您在命令行上的所有内容都是目标(例如appengine:update),那么就无法激活profile

当您阅读有关配置文件激活的讨论时(正如我过去经常做的那样),您会发现很多人在配置文件激活方面仍有很多需要。根据执行的目标激活配置文件甚至不是我遇到的愿望——只是说:不要抱太大希望。

您可能还想知道您正在尝试做的事情是否真的合适。你真的需要运行目标,或者你还能以某种方式从Maven 生命周期中受益吗?


Maven 生命周期实际上是一条(直接的)完成路径,遍历各个阶段。如果您想根据某些条件转移此路径,则配置文件是要走的路。如果appengine:update并且appengine:devserver是“非此即彼”(我相信他们是),那么您正在转移路径,应该使用配置文件,真的,并且最终仍然会在您的命令行上至少有两件事,即阶段和所需的配置文件。如果有一个典型情况和一个例外情况,您可以分别表示默认配置文件激活 ( activeByDefault) 和显式选择另一个配置文件 ( -P):

mvn deploy // choose default profiles
mvn deploy -Pproduction // ignore default profiles

如果您想同时执行这两项操作(例如devserver,在集成测试阶段和部署期间),可以通过与后续绑定的update插件将生命周期配置为执行此操作。您只需在命令行中添加一件事,即阶段。executionsphase

于 2013-04-12T08:14:00.867 回答