如何保持Maven配置文件是activeByDefault活动,即使另一个配置文件被激活?

z9ju0rcb  于 2024-01-06  发布在  Maven
关注(0)|答案(7)|浏览(244)

我在我的pom.xml中有一个配置文件,它应该总是活动的,除非它被显式地停用(-P!firstProfile)。我通过使用activeByDefault标志解决了这个问题:

<profiles>
  <profile>
    <id>firstProfile</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    ...
  </profile>
</profiles>

字符串
现在,在同一个pom.xml中,我定义了第二个配置文件,只有在配置文件真正激活时,它才应该是活动的(-P secondProfile)。因此默认行为为:firstProfile激活,secondProfile不活动。在其他时候,我想激活第二个配置文件,除了第一个配置文件。现在的问题是,如果我这样做与“-P secondProfile”firstProfile不幸被停用。Maven文档指出:
.此配置文件将自动为所有生成激活,除非使用上述方法之一激活同一POM中的另一个配置文件。当在命令行上或通过其激活配置激活POM中的配置文件时,默认情况下激活的所有配置文件将自动停用。.
有没有可能保持firstProfile始终处于活动状态(而不必在settings.xml中声明它)?

wribegjk

wribegjk1#

一个技巧是避免activeByDefault,而是通过缺少属性来激活配置文件,例如:

<profiles>
  <profile>
    <id>firstProfile</id>
    <activation>
      <property>
        <name>!skipFirstProfile</name>
      </property>
    </activation>
    ...
  </profile>
</profiles>

字符串
然后,您应该能够使用-DskipFirstProfile-P !firstProfile停用配置文件,否则配置文件将处于活动状态。
请参阅:Maven:完整参考,配置文件激活-通过属性的缺失激活

vulvrdjw

vulvrdjw2#

我希望有这样的可能性,我经常错过它。我能找到的唯一相关的JIRA问题是这个:
MNG-4917: Profile not active even though it has activeByDefault set to true
它被解析为Not A Problem
我已经停止使用activeByDefault,因为这种“全有或全无”的方法使它对我毫无价值。
改变这种行为的唯一方法是编写自己的DefaultProfileSelector替代品,将其注册为@Component( role = ProfileSelector.class )的plexus组件并将其放入${MAVEN_HOME}/lib/ext中(这样它将被选为默认配置文件选择器)。(如果您使用的是Maven 3.0.2或更早版本,则还必须编辑${MAVEN_HOME}/bin/m2.conf以在加载lib之前加载lib/ext

gk7wooem

gk7wooem3#

这个问题很古老,但似乎可以通过使用activeProfile而不是activeByDefault来解决这个问题。我使用的是Maven 3.3.9,但解决方案可能适用于早期版本。
只需在settings.xml中列出您的activeProfiles,如下所示:

<settings>
  <profiles>
    [...]
  </profiles>
  <activeProfiles>
    <activeProfile>my-awesome-profile</activeProfile>
  </activeProfiles>
</settings>

字符串
my-awesome-profile中,我有数据库URL等设置,所以它们总是适用。在这里,我激活了第二个配置文件resolve-from-central

$ mvn help:all-profiles -P resolve-from-central 
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-help-plugin:2.2:all-profiles (default-cli) @ standalone-pom ---
[INFO] Listing Profiles for Project: org.apache.maven:standalone-pom:pom:1
  Profile Id: resolve-from-central (Active: true , Source: settings.xml)
  Profile Id: my-awesome-profile (Active: true , Source: settings.xml)
  Profile Id: resolve-from-internal (Active: false , Source: settings.xml)


请注意my-awesome-profile仍然处于活动状态。

yptwkmov

yptwkmov4#

配置文件是一个很好的方式来使一些秩序到POM。特别是如果你使用同一个插件的多个执行用于不同的目的。

使用文件:

<profile>
    <id>alwaysActive</id>
    <activation>
         <file><exists>.</exists></file>
    </activation>
    ...
</profile>

字符串
这将始终为真(除非有人在Maven Boot 时删除了目录:)。
这也可能是区分项目类型的好方法。例如,我的项目总是存在module.json

使用配置文件激活扩展

有几个用于配置文件激活的Maven扩展。其中一个在这里的分叉中:
https://github.com/OndraZizka/el-profile-activator-extension

ztmd8pv5

ztmd8pv55#

您可以简单地在命令行上列出您想要激活的所有配置文件:
-P剖面-1,剖面-2
maven被设计成允许多个配置文件自动激活,但是如果你用-P覆盖它,那么只有在参数中列出的配置文件被激活。

qgelzfjb

qgelzfjb6#

您不能保持默认配置文件处于活动状态,但您可以将该配置文件的内容(示例中的.)移动到pom的主要部分。
仅仅因为你使用的是配置文件,并不意味着你所做的一切都需要在配置文件中。

bqujaahr

bqujaahr7#

这是我的activeByDefault的解决方法,它被设计破坏了,参见MNG-4917。感谢 *Sean帕特里克弗洛伊德 * 在他的回答中提供了这个问题的链接。

<activation>
  <jdk>[1.)</jdk>
</activation>

字符串

相关问题