2010-02-24 3 views
6

Meine pom.xml führt eine Ant-Task aus, um eine Datei mithilfe von FTP bereitzustellen. Diese Bereitstellung muss jedoch nur ausgeführt werden, wenn das Argument -Dftp=true im Maven-Befehl angegeben ist (d. H. mvn clean install -Dftp=true). So habe ich den folgenden Code geschrieben:Führen Sie eine Ant-Task in Maven nur aus, wenn eine Eigenschaft festgelegt ist

<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> 

diesen pom.xml verwendet, wird die Ant-Task nicht ausgeführt, wenn ich die -Dftp Eigenschaft in meinem Maven Befehl nicht definieren. Wenn ich jedoch irgendeine Art von Wert für diese Eigenschaft gebe, zum Beispiel -Dftp=false, wird die Ant-Task ausgeführt, was nicht korrekt ist.

Wie konfigurieren Sie die AntRun-Task so, dass sie nur ausgeführt wird, wenn eine bestimmte Eigenschaft einen bestimmten Wert hat?

ps: Ich weiß, ich kann eine profile verwenden, die nur aktiv ist, wenn ftp gleich true ist. Diese Lösung funktioniert, aber aus irgendeinem Grund möchte ich mein Antrun Plugin build blockieren lassen.

<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) 

Antwort

9

Es gibt eine if Aufgabe in Ant-contrib, die Sie verwenden können:

<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> 

Sie brauchen nicht die <else>, das war nur für Demo-Zwecke.

+0

Was für eine schreckliche (und ausführlich) Syntax für diese 'if' Aufgabe. Aber es macht die Arbeit, das ist wichtiger, o) Danke! – romaintaz

2

Falls Sie die IF-Syntax in Ant-contrib nicht mögen, können Sie antelopetasks verwenden.

<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> 
1

Mit Maven-antrun-Plugin: 1,8 Sie Attribute in der < Ziel/> Konfiguration Ant-Tasks ausführen oder nicht einige Bedingungen angeben können je nach Maven antrun plugin documentation

<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> 
beschrieben

wie gewünscht, jedoch unter Verwendung von < Ziel/> statt veraltet < Aufgaben/>

+0

Danke! Funktioniert für mich (mit Maven 3.0.5 und 3.3.9), das ist der richtige Weg für 2017 :) – xav