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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top