2011-08-25 10 views
15

estaba corriendo pruebas de unidad de selenio en TestNG con la tarea Ant de Java, así:¿Cuál es la diferencia entre los atributos <pathelement> 'ruta' y 'ubicación' en Ant?

<java classpathref="runtime.classpath" 
    classname="org.testng.TestNG" 
    failonerror="false"> 
    <arg value="-d" /> 
    <arg value="${grid.location}/target/reports" /> 
    <arg value="${lib.location}/testng.xml"/> 
</java> 

runtime.classpath es una estructura que incluía pathlike <pathelement path="${basedir}/target/classes/" />, por lo que pensé que era necesario para permitir que TestNG sé a qué clases se ejecute.

<path id="runtime.classpath"> 
     ... 
     <!-- Target classes --> 
     <pathelement path="${basedir}/target/classes/" /> 
</path> 

Sin embargo, seguí viendo en el registro que TestNG encontró 0 clases aplicables.

finalmente me dieron un poco de ayuda de un colega y parece que este fue el cambio clave:

<path id="runtime.classpath"> 
     ... 
     <!-- path attribute changed to location --> 
     <pathelement location="${basedir}/target/classes/" /> 
</path> 

Esto también tira en las clases de prueba correctamente:

<java classpathref="runtime.classpath" 
     classname="org.testng.TestNG" 
     failonerror="false"> 
     <arg value="-d" /> 
     <arg value="${grid.location}/target/reports" /> 
     <arg value="${lib.location}/testng.xml"/> 
     <classpath> 
      <pathelement location="${basedir}/target/classes/" /> 
     </classpath> 
    </java> 

¿Cuál es la diferencia entre el path y location atributos? Miré Writing a Simple Buildfile (específicamente la sección Estructuras similares a Path), pero en ese manual me parece que location es más específico que path. Eso no parece ser el caso empíricamente, pero no puedo entender por qué.

Respuesta

8

Parece que la diferencia entre la ruta y la ubicación es muchas entradas frente a una. Una ubicación es un archivo o directorio, una ruta puede ser una lista.

Desde el manual

El atributo de ubicación especifica un único archivo o directorio relativo a directorio base del proyecto (o un nombre de archivo absoluto), mientras que el atributo de ruta acepta listas Colón- o punto y coma separados de ubicaciones. El atributo de ruta se debe usar con rutas predefinidas ; en cualquier otro caso, se deben preferir múltiples elementos con atributos de ubicación .

Tenga en cuenta que la JVM utilizada por ant no tiene ninguna relación con la JVM utilizada por la tarea java. Por defecto, el entorno de la hormiga no es el mismo que el de las cosas que comenzaron con la tarea Java vía hormiga. Esto es realmente útil cuando quiere usar una JVM diferente de la que la hormiga quiere usar y hace las cosas explícitas, lo que ayuda a evitar sorpresas más adelante.

Mira la documentación para el java task, particularmente clonevm

clonevm: Si es verdadero, entonces todas las propiedades del sistema y la bootclasspath de la máquina virtual de Java en forma de horquilla serán los mismos que los de la Java VM ejecutando Ant. El valor predeterminado es "falso" (se ignora si el fork está deshabilitado). desde Ant 1.7

+0

¿Cómo se diferencian los atributos 'path' y' location' de 'pathelement'? ¿Quiere decir que agregar una estructura similar a una ruta de acceso como referencia de ruta de clase a la tarea de Java es diferente dependiendo de si se está ejecutando Ant JVM o la JVM bifurcada? – Feanor

+0

Buena pregunta. Agregado un poco más arriba, puede intentar ejecutar ambos en modo detallado con depuración (-v -d) y ver cómo difieren los dos archivos. –

Cuestiones relacionadas