2011-01-18 9 views
15

Mi proyecto maven java usa maven-antrun-plugin para ejecutar una secuencia de comandos deploy.xml ant que implementa mi aplicación. Deploy.xml utiliza la tarea <if> y esto parece estar causando el problema;Uso de la función antcontrib <if> a través de maven-antrun-plugin

[INFO] ejecución de tareas
[taskdef] No puede mostrarse las definiciones de recursos netos/sf/antcontrib/antlib.xml. No pudo ser encontrado.

implementar:
[INFO] --------------------------------------- ---------------------------------
[ERROR] BUILD ERROR
[INFO] ----- -------------------------------------------------- -----------------
[INFO] Se ha producido una Ant BuildException: se ha producido el siguiente error al ejecutar esta línea:
E: \ My_Workspace \ xxxxxx \ xxxxxx \ xxxxxxx \ deploy.xml: 24: Problema: no se pudo crear la tarea o escribir si
Causa: El nombre no está definido.
Acción: verifica la ortografía.
Acción: compruebe que se hayan declarado tareas/tipos personalizados.
Acción: Verifique que se haya realizado cualquier <presetdef>/<macrodef> declaraciones.

Aquí está la configuración de plugin antrun de mi 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> 

.. y aquí está la sección relevante de mi deploy.xml;

<target name="deploy" if="deploy"> 
    <if> <!-- line 24 --> 
     <and> 

Por qué miro en mi repo experto puedo ver ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar y cuando miro dentro de la jarra puedo ver net/sf/antcontrib/antcontrib.properties por lo que no hay problema.

Cuando compruebo los valores de maven.compile.classpath, maven.compile.classpath y maven.compile.classpath no puedo ver ninguna referencia a antcontrib, este podría ser el problema? ¿Por qué no aparecen cuando antcontrib se define como una dependencia?

+0

https://stackoverflow.com/questions/4368243/maven-antrun-with-sequential-ant-contrib-fails-to-run/45958355#45958355 –

Respuesta

3

Bien, lo he resuelto.

Al mover las dependencias de la etiqueta <build><plugin> y ponerlas en las otras dependencias del proyecto parece haber hecho el truco.

+1

Como se explicó en otra respuesta, no es una buena idea incluir dependencias de hormigas en la ruta de clases de compilación para ejecutar el plugin Maven. –

+0

Extrañamente, tuve que hacer esto para que se descargara. Luego, lo moví de vuelta a las dependencias del complemento. Solo espero que sea un problema IDE. – RockMeetHardplace

24

Creo que no es una buena idea agregar ant para compilar classpath para ejecutar maven plugin.

utilizo Maven 3.0.4 y funcionó mediante la especificación de espacio de nombres para las etiquetas de hormigas-contrib, por ejemplo:

<configuration> 
    <target> 
    <echo message="The first five letters of the alphabet are:"/> 
    <ac:for list="a,b,c,d,e" param="letter" xmlns:ac="antlib:net.sf.antcontrib"> 
     <sequential> 
     <echo>Letter @{letter}</echo> 
     </sequential> 
    </ac:for> 
    </target> 
</configuration> 

Mis experto-antRun-plugin dependencias:

<dependencies> 
    <dependency> 
    <groupId>ant-contrib</groupId> 
    <artifactId>ant-contrib</artifactId> 
    <version>1.0b3</version> 
    <exclusions> 
     <exclusion> 
     <groupId>ant</groupId> 
     <artifactId>ant</artifactId> 
     </exclusion> 
    </exclusions> 
    </dependency> 
    <dependency> 
    <groupId>org.apache.ant</groupId> 
    <artifactId>ant-nodeps</artifactId> 
    <version>1.8.1</version> 
    </dependency> 
</dependencies> 
+0

¡Eso es increíble, gracias! –

+0

¡Lo único que funcionó para mí! – electrotype

+0

¡me salvaste la vida! – cthiebaud

0

Otra solución sería ser: mantener el ant-contrib-1.0b3.JAR a un camino y luego se lo define como esto

<property name="runningLocation" location="" /> 
<taskdef resource="net/sf/antcontrib/antcontrib.properties"> 
    <classpath> 
     <pathelement location="${runningLocation}/ant-contrib-1.0b3.jar" /> 
    </classpath> 
</taskdef> 

continuación

<target name="doSomething"> 
    <if> 
     <equals arg1="${someProp}" arg2="YES" /> 
     <then> 
      <echo message="It is YES" /> 
     </then> 
     <else> 
      <echo message="It is not YES" /> 
     </else> 
    </if> 
</target> 

pongo ejemplo de código completo aquí que se puede descargar https://www.surasint.com/run-ant-with-if-from-maven/

2

he encontrado que es necesario incluir el hormiguero contrib dependency dentro del complemento que habilitará la etiqueta taskdef para encontrar antcontrib.properties

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <dependencies> 
       <dependency> 
        <groupId>ant-contrib</groupId> 
        <artifactId>ant-contrib</artifactId> 
        <version>20020829</version> 
       </dependency> 
      </dependencies> 
      <executions> 
       <execution> 
        <id>copy-and-rename-template-files</id> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
        <configuration> 
         <target name = "copy-and-rename-template-files"> 
          <taskdef resource="net/sf/antcontrib/antcontrib.properties"/> 
          <if> 
           <available file="src/main/resources/docker/templates" type="dir"/> 
           <then> 
            <copy todir="${project.build.directory}/docker"> 
             <fileset dir="src/main/resources/docker/templates"> 
              <include name="**/*"/> 
             </fileset> 
            </copy> 


            <move todir="${project.build.directory}/docker"> 
             <fileset dir="${project.build.directory}/docker"> 
              <include name="*"/> 
             </fileset> 
             <mapper> 
              <regexpmapper from="(.*)project(.*)" to="\1${project.artifactId}\2"/> 
             </mapper> 
            </move> 
           </then> 

           <else> 
            <echo>src/main/resources/docker/templates does not exist, skipping processing docker templates</echo> 
           </else> 
          </if> 
         </target> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
+0

Gracias por intentar ayudar en StackOverflow, pero su respuesta sería aún más apreciada si hubiera aumentado su código con alguna explicación. – Yunnosch

+0

No hay problema, mi explicación ha sido agregada. – Gapmeister66

+0

¡Gracias! ¡Esto era exactamente lo que estaba buscando! – rcantrel

Cuestiones relacionadas