MAVEN (Surefire): Copiar recursos de teste de SRC/Test/Java
-
26-09-2019 - |
Pergunta
Plugin Surefire (Testing) do Mavenmvn test-compile
copia os arquivos src/test/resources
para target/test-classes
. Compila .java
dentro src/test/java
, e copia o compilado .class
arquivos para target/test-classes
.
Mas não copia recursos de src/test/java
, e é mais conveniente poder colocar recursos de teste no mesmo diretório que o .java
aulas pelas quais são recursos, do que em uma hierarquia paralela em src/test/resources
.
É possível fazer com que o MAVEN copie os recursos de src/test/java
?
Solução
A cópia do recurso é tudo feito pelo Maven-Resource-Plugin e, se você ler o documento, verá como adicionar cópia de recursos do SRC/Test/Java.
Ver http://maven.apache.org/plugins/MavenResources-Plugin/Testources-mojo.html para a meta de resistência ao teste, incluída no ciclo de vida padrão.
E então veja http://maven.apache.org/pom.html, e procurar <testResources>
.
Outras dicas
BMargulies deu a resposta, mas deixe -me preencher alguns detalhes.
<testresources>
pode ser adicionado ao <build>
Nó do POM do projeto, assim:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
</testResource>
</testResources>
Que copia tudo em src/test/java
-- incluindo o .java
código -fonte, que não queremos.
Ele também (como BMargulies apenas sugeriu) substitui e substitui o padrão <testResources>
Definindo o POM dos pais padrão que todos os outros pom herdam (a menos que essa herança seja alterada). As cópias dos pais padrão src/test/resources
, então, substituindo isso, não somos tão copiados como de costume, o que não queremos. (Em particular, todo o meu motivo para fazer isso é usar unidades, o que quer o unitils.properties
arquivo copiado - e isso é (para mim, de qualquer maneira) em src/test/resources
.
Então, voltamos src/test/resources
:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
Que cópias na ordem listada, de modo que para arquivos que existem em ambos /src/test/java
(e subdiretórios) e em /src/test/resources
(e subdiretórios), o src/test/resources
Versão é a que acaba em test-classes
.
Agora só precisamos não copie o .java
arquivos:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
A única maneira de funcionar para mim quando eu coloquei minha configuração de teste em src/test/resources
pasta (análogo de src/test/java
para arquivos de origem). Os arquivos desta pasta são copiados para o target/test-classes
Pasta que está no caminho de classe durante a execução dos testes. Não sei por que, mas a próxima configuração não funcionou para mim:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
É possível fazer com que o MAVEN copie os recursos do SRC/Test/Java?
Sim, isso é facilmente alcançado com o Plugin Antun.