为什么按属性激活Maven无效?

时间:2018-11-12 19:55:45

标签: maven maven-3 maven-profiles

我有一个由同一文件中设置的属性激活的Maven配置文件:

<properties>
  <platform>vanilla</platform>
</properties>


<profile>
  <id>spark-2.2</id>

  <activation>
    <property>
      <name>platform</name>
      <value>vanilla</value>
    </property>
  </activation>

  <modules>
    <module>dependency/preload</module>
  </modules>
</profile>

但是,当我运行mvn install时,依赖项/预加载未出现在反应堆构建序列中,最终导致编译错误。为什么同一个文件中的属性无用,我该怎么办?

1 个答案:

答案 0 :(得分:1)

请问有什么要起作用的吗?为什么要静态将其固定到相同的pom?

通常,当您有许多配置文件时,您可能希望拥有一个配置文件:

<activation>
    <activeByDefault>true</activeByDefault>
</activation>

但是当然不一定。然后,其他配置文件会被明确触发或稍后提供几种方式。

我已附上Introduction to Build Profiles

的以下部分
  

可以通过多种方式触发/激活配置文件:

     
      
  • 明确
  •   
  • 通过Maven设置
  •   
  • 基于环境变量
  •   
  • 操作系统设置
  •   
  • 文件存在或丢失
  •   

环境变量部分是我认为您正在尝试使用的部分。并使其更加混乱,以后称为系统属性。因此,这是一个系统属性。稍后在同一文档中,您将看到用法:

<activation>
  <property>
    <name>debug</name>
  </property>
</activation>

将通过(例如)激活:

mvn install -Ddebug

例如,以下操作无效:

export debug=true
mvn install

那么为什么不将pom属性用作系统属性或任何属性。我认为是因为配置文件应该能够覆盖pom属性值,然后才可以将其视为默认值。

稍后再在同一文档中显示几行:

  

POM中的配置文件
  ...
  POM中指定的配置文件可以修改以下POM元素:
  ...
  (实际上在主POM中不可用,但在幕后使用)