My maven java project uses the maven-antrun-plugin to execute a deploy.xml ant script that deploys my app. The deploy.xml uses the <if>
task and this seems to be causing the problem;
[INFO] Executing tasks
[taskdef] Could not load definitions from resource net/sf/antcontrib/antlib.xml. It could not be found.deploy:
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] An Ant BuildException has occured: The following error occurred while executing this line:
E:\My_Workspace\xxxxxx\xxxxxx\xxxxxxx\deploy.xml:24: Problem: failed to create task or type if
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.
Here is the antrun plugin config from my pom;
<plugin>
<inherited>false</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>remote-deploy</id>
<phase>install</phase>
<configuration>
<tasks>
<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="maven.plugin.classpath"/>
<property name="compile_classpath" refid="maven.compile.classpath" />
<property name="runtime_classpath" refid="maven.runtime.classpath" />
<property name="plugin_classpath" refid="maven.plugin.classpath" />
<echo message="compile classpath: ${compile_classpath}"/>
<echo message="runtime classpath: ${runtime_classpath}"/>
<echo message="plugin classpath: ${plugin_classpath}"/>
<ant antfile="${basedir}/deploy.xml">
<target name="deploy" />
</ant>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
<version>1.0b3</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-jsch</artifactId>
<version>1.7.1</version>
</dependency>
</dependencies>
</plugin>
.. and here is the relevant section from my deploy.xml;
<target name="deploy" if="deploy">
<if> <!-- line 24 -->
<and>
Why I look in my maven repo I can see ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar
and when I look inside the jar I can see net/sf/antcontrib/antcontrib.properties
so no problem there.
When I check the values of maven.compile.classpath
, maven.compile.classpath
and maven.compile.classpath
I can't see any reference to antcontrib
, could this be the problem? Why don't they appear when antcontrib
is defined as a dependancy?
another solution would be: keep the ant-contrib-1.0b3.jar to a path and then define it like this
then
I put full code example here which you can download https://www.surasint.com/run-ant-with-if-from-maven/
I found that you need to include the ant-contrib dependency inside the plugin which will enable the taskdef tag to find antcontrib.properties
OK, I've solved it.
Moving the dependencies out of the
<build><plugin>
tag and putting them in with the other project dependencies seems to have done the trick.I think it is not a very good idea to add ant to compile classpath in order to run maven plugin.
I use Maven 3.0.4 and it worked by specifying namespace for ant-contrib tags, for example:
My
maven-antrun-plugin
dependencies: