java - type - Ejecutar el script Ant de Gradle
gradle project java (2)
He solucionado el siguiente error de Gradle:
Execution failed for task '':test''.
> Problem: failed to create task or type junit
Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found.
This looks like one of Ant''s optional components.
Action: Check that the appropriate optional JAR exists in
-ANT_HOME/lib
-the IDE Ant configuration dialogs
agregando las siguientes líneas en mi script Ant build.xml
justo antes de mi tarea Ant <junit>
<taskdef name="junit"
classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"
classpath="/usr/share/ant/lib/ant-junit.jar:/usr/share/ant/lib/ant-junit4.jar"
/>
Esta es la test
completa de objetivo Ant:
<target name="test" depends="test_compile">
<mkdir dir="${test.report.dir}" />
<!-- Required for Gradle -->
<taskdef name="junit"
classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"
classpath="/usr/share/ant/lib/ant-junit.jar:/usr/share/ant/lib/ant-junit4.jar"
/>
<junit printsummary="yes" fork="true" haltonfailure="on">
<classpath refid="classpath_test"/>
<batchtest>
<fileset dir="${test.src.dir}">
<include name="**/*Tester.java" />
</fileset>
</batchtest>
</junit>
</target>
La respuesta sobre "JUnitTask no se encontró" de los asistentes ha sido una ayuda útil para encontrar mi solución anterior.
Identifica el problema
Para entender el problema, build.xml
los scripts build.xml
y build.gradle
para comparar las salidas Ant y Gradle. Ver también la respuesta de ¿Cómo obtener "gradle" tiene detalles de salida similares a "hormiga"? para algunos detalles.
La diferencia interesante está en el parámetro -classpath
:
Usando hormiga
/some/path/myApplication.jar
/usr/share/java/ant-launcher-1.9.7.jar
/usr/share/ant/lib/ant.jar
/usr/share/ant/lib/junit.jar
/usr/share/ant/lib/ant-junit.jar
/usr/share/ant/lib/ant-junit4.jar
Usando Gradle
/some/path/myApplication.jar
/usr/lib/gradle/3.2.1/lib/ant-launcher-1.9.6.jar
/usr/lib/gradle/3.2.1/lib/ant-1.9.6.jar
Diferencia
Podemos observar que Gradle usa su propio ant-launcher-1.9.6.jar
y ant-1.9.6.jar
. Pero Gradle no usa los JAR de la instalación de Ant ( /usr/share/ant/lib/*jar
son enlaces simbólicos a /usr/share/java/*jar
).
A largo plazo
En esta discusión sobre la integración de Ant JUnit taskdef , Luke Daley confirma en noviembre de 2013;
Gradle usa su propia ''instancia'' de hormiga y no se molesta en usar lo que está instalado en
$ANT_HOME
En esta discusión sobre JUnit 5, Eric Wendelin expresó la prioridad de integrar más JUnit dentro del núcleo de Gradle.
Por lo tanto, la solución a largo plazo es dejar de usar JUnit de los scripts de Ant y convertirlos en sintaxis de Gradle.
Estoy tratando de ejecutar script ant de Gradle, pero tengo esta excepción:
Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found.
Y prefiero usar ant-junit desde libs locales, pero no sé cómo, soy bastante nuevo para Gradle.
Encontré este código
configurations {
antClasspath
}
dependencies {
antClasspath ''org.apache.ant:ant-junit4:1.8.3''
}
ClassLoader antClassLoader = org.apache.tools.ant.Project.class.classLoader
configurations.antClasspath.each { File f ->
antClassLoader.addURL(f.toURI().toURL())
}
Pero no sé lo que tengo que cambiar si el archivo jar ya está en la carpeta mt lib. No quiero usar maven repo.
Esto es solo reenviar el comentario, lo que resolvió mi problema: gracias a Opal
Ejecutar gradle sin conexión de red puede no ser una muy buena idea. Sin embargo, si tiene el jar que necesita en el directorio local, solo agregue las dependencias id a script mediante dependencias de archivos. Ver: http://www.gradle.org/docs/current/userguide/dependency_management.html#file-dependencies from Opal