代码之家  ›  专栏  ›  技术社区  ›  Marcel Overdijk

如何根据正在执行的目标激活配置文件

  •  8
  • Marcel Overdijk  · 技术社区  · 13 年前

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

    例如,我现在正在做的事情:

    mvn appengine:devserver -Pdevelopment
    
    mvn appengine:update -Pproduction
    

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

    这可能吗?

    2 回复  |  直到 13 年前
        1
  •  6
  •   Charlee Chitsuk    13 年前

    这个 Maven Model 告诉我们 the profile 由各种元素组成,包括 build .作为以下示例:-

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

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

    我希望这能有所帮助。

        2
  •  3
  •   Sander Verhagen    13 年前

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

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

    这可能是插件默认配置( plugin.configuration )您试图以这种方式覆盖,而不是特定执行的配置( plugin.executions.execution.configuration ). 对我来说没问题。但关键是要激活个人资料。

    如果您的命令行上只有目标(例如。 appengine:update )有 不可能 那会 activate a profile .

    当你阅读关于 profile activation (就像我过去固执地做了很多事情一样)你会发现,在个人资料激活方面,许多人仍然想要很多东西。根据执行的目标激活个人资料甚至不是我遇到的愿望——只是想说:不要抱太大希望。

    你可能还想知道你试图做的事情是否真的合适。你真的需要实现目标吗?或者你还能从中受益吗 Maven lifecycle ?


    Maven生命周期实际上是一条(直接的)完成之路,贯穿各个阶段。如果你想根据某些条件转移这条路径,配置文件是最好的选择。如果 appengine:更新 appengine:devserver 如果是“非此即彼”(我相信他们是这样的),你正在转移路径,真的应该使用概要文件,并且最终在命令行上至少有两件事,即阶段和所需的概要文件。如果有一种典型情况和一种特殊情况,您可以通过默认的配置文件激活来表达这一点( activeByDefault )并明确选择另一个配置文件( -P )分别为:

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

    如果你想同时做这两件事(例如。 devserver 在集成测试阶段以及 update 在部署期间),可以通过插件配置生命周期 executions phase 随后您只需在命令行上有一件事,即阶段。