Maven:如果属性标签中的pom.xml中的sentense

Ely*_*ahu 6 xml if-statement pom.xml maven sentence

如果设置了环境变量,我想设置属性.我搜索了很多内容,我发现的所有内容都类似于下面的代码,但我不断收到错误:

[致命]不可解析的POM Y:\ Maven\parent-pom\pom.xml:TEXT必须紧跟END_TAG而不是START_TAG(位置:START_TAG s een ... roperties"\ r \n
classpathref ="maven. plugin.classpath"/> ... @ 29:55)@第29行,第55栏

这是我正在尝试的代码,它在pom.xml中,我运行命令 -

mvn --errors deploy

当然,如果您有关于如何根据环境变量内容在pom.xml中设置属性的其他建议,我将很乐意获得任何其他解决方案.

谢谢,Eli

    <distributionManagement>
       .....
    </distributionManagement>

    <properties>
          <tasks>
        <taskdef resource="net/sf/antcontrib/antcontrib.properties"
          classpathref="maven.plugin.classpath" />

        <if>
           <condition>
             <equals arg1="${env.WAS60_HOME}" arg2=""\>
           </condition>
           <then>
             <was60.home>${env.WAS60_HOME}</was60.home>
             <javac>${was60.home}/java/bin/javac</javac>
           </then>
        </if>

         <if>
           <condition>
             <equals arg1="${env.WAS85_HOME}" arg2=""\>
           </condition>
           <then>
             <was85.home>${env.WAS85_HOME}</was60.home>
             <javac>${was85.home}/java/bin/javac</javac>
           </then>
        </if>
      </tasks>
</properties>
    <profiles>
       <profile>
    <id>was.base.v60</id>
            <dependencies>
               <dependency>
                 ....
                  <systemPath>${was60.home}/java/jre/lib/xml.jar</systemPath>
               </dependency>
               .....
            </dependencies>
        </profile>
        <profile>
    <id>was.base.v85</id>
            <dependencies>
               <dependency>
                 ....
                  <systemPath>${was85.home}/java/jre/lib/xml.jar</systemPath>
               </dependency>
               .....
            </dependencies>
        </profile>
    </profiles>
Run Code Online (Sandbox Code Playgroud)

Mar*_*nor 10

更好的方法是使用配置文件激活.

<profiles>
  <profile>
    <id>was.base.v60</id>
    <activation>
      <property>
        <name>env.WAS60_HOME</name>
      </property>
    </activation>
    <dependencies>
      <dependency>
        ....     
        <systemPath>${env.WAS60_HOME}/java/jre/lib/xml.jar</systemPath>
      </dependency>
      .....    
    </dependencies>
  </profile>
  <profile>
    <id>was.base.v85</id>
    <activation>
      <property>
        <name>env.WAS85_HOME</name>
      </property>
    </activation>
    <dependencies>
      <dependency>
        ....     
        <systemPath>${env.WAS85_HOME}/java/jre/lib/xml.jar</systemPath>
      </dependency>
      .....    
    </dependencies>
  </profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)

更新:

我使用配置文件的首选方法是在我的POM中使用一组默认属性,然后使用我的设置文件中的配置文件按需覆盖这些属性.

使用"-s"和"-P"命令行参数可以很容易地明确这种方法:

mvn -s $PROJECT_SETTINGS -P myProfile ....
Run Code Online (Sandbox Code Playgroud)

这种方法很容易使用Config File Provider插件在Jenkins中维护,该插件支持GUI编辑我用于每个项目的各种设置文件.

更新2:

这是我如何设置构建的示例.POM包含具有默认属性值的节.我设置了一个或多个pfiles来覆盖这些值:

<project>
  <properties>
     <my.property1>hello</my.property1>
     <my.property2>world</my.property2>
     ..
  </properties>
  ..

  <build>
    <profiles>
      <profile>
        <id>build_in_spanish</id>
        <properties>
          <my.property1>hola</my.property1>
          <my.property2>mundo</my.property2>
          ..
        </properties>
      </profile>
      <profile>
        <id>build_in_irish</id>
        <properties>
          <my.property1>dia dhuit</my.property1>
          <my.property2>an domhain</my.property2>
          ..
        </properties>
      </profile>
    <profiles>
  </build>
</project>
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中,构建默认为英语.使用西班牙语设置运行构建

mvn -P build_in_spanish ...
Run Code Online (Sandbox Code Playgroud)

注意:

  • 配置文件可以位于POM中,也可以位于单独的设置文件中.后一种方法提供了最大的灵活性.
  • 可以显式启用配置文件(使用"-P"命令行选项或尝试发现它所在的环境.这是设计选择)


Ely*_*ahu 3

显然,Maven 中没有办法执行正确的 IF-THEN-ELSE 语句。至少我没有找到。

我发现的最接近的是使用“激活”标签。如果满足其中的条件,它将激活配置文件。

Maven 2.0.X 中的多个条件存在一些错误,不确定现在的状态如何 -

http://jira.codehaus.org/browse/MNG-4565

因此,这里回答了一个代码示例 -

Maven 2:使用条件替换值运行 maven-replacer-plugin?

但如果你想做类似<< IF ... then ... Else >>的事情,那么你就会撞到墙上。当然,还有其他方法,我认为这是有意完成的,因此您必须遵循 Maven 方式。

感谢所有试图帮助 Elyahu 的人

  • 这是 Maven 的大问题:*你必须以 Maven 的方式做事*,这总是那么不直观,以至于在尝试查找和应用相关文档两个小时后,我放弃了。 (2认同)