我的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
,如果我没有在Maven命令中定义-Dftp
属性,则不会执行Ant任务。但是,如果我为此属性提供任何类型的值,例如-Dftp=false
,则运行Ant任务,这是不正确的。
只有在给定属性具有给定值的情况下,如何配置AntRun任务才能运行?
ps:我知道我可以使用仅在profile
等于ftp
时才有效的true
。这个解决方案有效,但出于某种原因,我希望我的Antrun插件build
阻止。
<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)
答案 0 :(得分:9)
您可以使用if
中的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>
,这仅用于演示目的。
答案 1 :(得分:2)
如果你不喜欢Ant-contrib中的IF语法,你可以使用antelopetasks。
<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>
答案 2 :(得分:1)
使用maven-antrun-plugin:1.8您可以在&lt; target /&gt;中指定属性根据{{3}}
中描述的某些条件执行或不执行Ant任务的配置<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>
根据您的要求,但使用&lt; target /&gt;而不是弃用&lt; tasks /&gt;