gpt4 book ai didi

maven-2 - Maven - 根据属性激活子配置文件

转载 作者:行者123 更新时间:2023-12-02 00:44:16 28 4
gpt4 key购买 nike

场景:

  1. 鉴于
    1. 定义配置文件和子项(作为模块)的父 POM
    2. 将通过引用父 POM 来使用配置文件的子项目。
  2. 目的是跳过父级中的配置文件执行并仅在子级中执行
  3. 个人资料有激活部分 <activation><property><name>foo</name></property><activation>
  4. 由于父级未定义 foo属性 - 配置文件处于非事件状态,不会为父构建执行
  5. 现在,我定义 <properties><foo>true</foo></properties>在子级中,希望在执行子级构建并激活配置文件时会拾取该属性。没有这样的运气。配置文件从未被激活,这告诉我属性从未被设置。
  6. 请注意:mvn package -Dfoo=true激活父级和子级的配置文件

我是在尝试做不可能的事还是只是做错了?

附注嗯 - 即使我在父级中定义属性,配置文件也不会被触发。给出了什么?

最佳答案

为了扩展@rich-seller的答案和@Bostone的 self 回答,似乎不可能有一个设置,其中父POM定义一些配置文件作为替代品,而子POM默认选择这些配置文件之一,同时允许您暂时覆盖子项的选择(即在 CLI 上)。考虑使用某些框架和关联插件的项目的父 POM,我们可以假设这两个版本都是由属性定义的:

<profiles>
<profile>
<id>newest</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<framework.version>2.0</framework.version>
<plugin.version>2.0</plugin.version>
</properties>
</profile>
<profile>
<id>older</id>
<activation>
<property>
<name>older.framework</name>
<value>true</value>
</property>
</activation>
<properties>
<framework.version>1.1</framework.version>
<plugin.version>1.1</plugin.version>
</properties>
</profile>
</profiles>

现在,默认情况下从此父 POM 继承的子项将如您所期望的那样使用 2.0,并且 -Polder-Dolder.framework=true将尝试使用旧框架构建它(例如测试兼容性)。但是你不能在子 POM 中写入

<properties>
<older.framework>true</older.framework>
</properties>

并且有 older配置文件会自动激活。您可以使用基于文件的激活来使此模块针对 1.1 构建,如果 newest默认情况下不处于事件状态,但是暂时在 2.0 上运行它并不容易:据我所知 oldernewest如果您通过 -Pnewest,配置文件将处于事件状态,因此您需要显式禁用其他配置文件,如果您有十几个配置文件,这是不合理的。所以除了将配置文件信息复制到子POM中之外没有其他解决方案:

<properties>
<framework.version>1.1</framework.version>
<plugin.version>1.1</plugin.version>
</properties>

此时-Pnewest无法覆盖这些属性,因此您需要使用 -Dframework.version=2.0 -Dplugin.version=2.0 .

换句话说,只有当所有子模块默认情况下都可以使用相同的配置文件(此处 newest )时,配置文件才有用。如果其中一些通常是用 1.1 构建的,另一些是用 2.0 构建的,则配置文件就没用了。

看起来这是 Maven 核心增强的用例,或者可能是 Maven 3 构建扩展。 http://docs.codehaus.org/display/MAVEN/Custom+Profile+Activatorshttps://github.com/maoo/maven-tiles我想到了。

关于maven-2 - Maven - 根据属性激活子配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1504850/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com