pom java maven junit

java - pom - JUnit+Maven: accediendo a ${project.build.directory} valor



maven resources folder (3)

Creo que usar las propiedades del sistema es bastante sencillo si configura el plugin surefire como se explica aquí http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html . Incluso el ejemplo está respondiendo su pregunta directamente:

<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.9</version> <configuration> <systemPropertyVariables> <propertyName>propertyValue</propertyName> <buildDirectory>${project.build.directory}</buildDirectory> [...] </systemPropertyVariables> </configuration> </plugin> </plugins> </build> [...] </project>

En mis pruebas de unidad quiero crear un directorio tmp dentro de $ {project.build.directory}. ¿Cómo puedo acceder al valor de $ {project.build.directory} dentro de mi prueba de unidad?

Una forma, en la que podría pensar, es proporcionar un archivo de propiedades filtradas en los recursos de prueba, que tiene ese valor. (No lo he intentado todavía, pero creo que debería funcionar).

¿Hay una manera directa de acceder / pasar el valor de esta propiedad?

Saludos, Florian


He usado algo como esto con cierto éxito antes. La prueba de la unidad aún se ejecutará, incluso si no se utiliza Maven, el directorio de destino se creará dos dirs up en relación con el cwd de donde se ejecutan las pruebas.

public File targetDir(){ String relPath = getClass().getProtectionDomain().getCodeSource().getLocation().getFile(); File targetDir = new File(relPath+"../../target"); if(!targetDir.exists()) { targetDir.mkdir(); } return targetDir; }


Recuerde que sus pruebas de unidad no tienen que ejecutarse desde el complemento sureño de Maven, por lo que la propiedad ${project.build.directory} podría no estar disponible. Para hacer que sus pruebas sean más portátiles, preferiría usar File.createTempFile() .