Запускать задачу Ant в Maven, только если задано свойство

Мой pom.xml выполняет задачу Ant для развертывания файла с помощью FTP. Однако это развертывание должно выполняться только в том случае, если в команде Maven указан аргумент -Dftp=true (т.е. mvn clean install -Dftp=true). Таким образом, я написал следующий код:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.2</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks if="ftp">
                            <echo message="Deploying files through FTP..."/>
                            ...
                        </tasks>
                    </configuration>
                </execution>
            </executions>

При использовании этого pom.xml задача Ant не выполняется, если я не определяю свойство -Dftp в моей команде Maven. Однако, если я даю этому свойству какое-либо значение, например -Dftp=false, запускается задача Ant, что неверно.

Как настроить запуск задачи AntRun только в том случае, если заданное свойство имеет заданное значение?

ps: я знаю, что могу использовать profile, который активен только тогда, когда ftp равно true. Это решение работает, но по какой-то причине я хочу иметь блок build плагина Antrun.

<profiles>
    <profile>
        <id>deployment</id>
        <activation>
            <activeByDefault>false</activeByDefault>
            <property>
                <name>ftp</name>
                <value>true</value>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    ... (define the Ant task here)

person Romain Linsolas    schedule 24.02.2010    source источник


Ответы (3)


В Ant-contrib, который вы могли бы использовать:

  <plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.3</version>
    <executions>
      <execution>
        <id>ftp</id>
        <phase>package</phase>
        <goals>
          <goal>run</goal>
        </goals>
        <configuration>
          <tasks>
            <taskdef resource="net/sf/antcontrib/antcontrib.properties"
              classpathref="maven.plugin.classpath" />
            <if>
              <equals arg1="${ftp}" arg2="true" />
              <then>
                <echo message="The value of property ftp is true" />
              </then>
              <else>
                <echo message="The value of property ftp is not true" />
              </else>
            </if>
          </tasks>
        </configuration>
      </execution>
    </executions>
    <dependencies>
      <dependency>
        <groupId>ant-contrib</groupId>
        <artifactId>ant-contrib</artifactId>
        <version>20020829</version>
      </dependency>
    </dependencies>
  </plugin>

Вам не нужен <else>, это было просто для демонстрации.

person Pascal Thivent    schedule 24.02.2010
comment
Какой ужасный (и многословный) синтаксис для этой if задачи. Но он делает свою работу, что более важно; o) Спасибо! - person Romain Linsolas; 24.02.2010

С помощью maven-antrun-plugin: 1.8 Вы можете указать атрибуты в конфигурации ‹target /› для выполнения или невыполнения задач Ant в зависимости от некоторых условий, как описано в Документация по плагину Maven antrun

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>run</goal>
        </goals>
        <configuration>
          <target if="ftp">
            <echo message="To run, just call mvn package -Dftp=true"/>
          </target>
        </configuration>
      </execution>
    </executions>
  </plugin>

Как вы и просили, но с использованием ‹target /› вместо устаревших ‹tasks /›

person Andrei Neshcheret    schedule 23.07.2015
comment
Спасибо! У меня работает (с Maven 3.0.5 и 3.3.9), так и будет в 2017 году :) - person xav; 03.11.2017

Если вам не нравится синтаксис IF в Ant-contrib, вы можете использовать антилопетаски.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.7</version>
    <inherited>false</inherited>
    <configuration>
        <target>
            <taskdef name="if" classname="ise.antelope.tasks.IfTask"/>

            <if name="maven.ant.target">
                <ant target="${maven.ant.target}"/>
                <else>
                    <fail message="Please specify a target to execute in 'maven.ant.target' property" />
                </else>
            </if>
        </target>
    </configuration>
    <dependencies>
        <!-- http://antelope.tigris.org/nonav/docs/manual/bk03.html -->
        <dependency>
            <groupId>org.tigris.antelope</groupId>
            <artifactId>antelopetasks</artifactId>
            <version>3.2.10</version>
        </dependency>
    </dependencies>
</plugin>
person rozky    schedule 04.05.2012