Maven (infallibile): mezzi di controllo copia da src / test / java
-
26-09-2019 - |
Domanda
di Maven Surefire (testing) Plugin mvn test-compile
copia i file in src/test/resources
a target/test-classes
. Compila .java
in src/test/java
, e copia i file .class
compilati target/test-classes
.
Ma non copia le risorse da src/test/java
, ed è più conveniente per essere in grado di mettere le risorse di prova nella stessa directory delle classi .java
che sono le risorse per, che in una gerarchia parallela in src/test/resources
.
E 'possibile ottenere Maven per copiare le risorse da src/test/java
?
Soluzione
La copia risorsa è tutto fatto dalla Maven-resource-plugin, e se leggete il doc di esso si vedrà come aggiungere la copia delle risorse da src / test / java.
http://maven.apache.org/plugins/maven-resources- plugin / testResources-mojo.html per l'obiettivo del test-risorse, che è incluso nel ciclo di vita di default.
E poi vedere http://maven.apache.org/pom.html , e il look per <testResources>
.
Altri suggerimenti
bmargulies ha dato la risposta , ma mi permetta di riempire alcuni dettagli.
<testresources>
può essere aggiunto al nodo <build>
delle POM del progetto, in questo modo:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
</testResource>
</testResources>
che copia tutto in src/test/java
- compreso il codice sorgente .java
, che non vogliamo.
anche (come bmargulies solo accennati) le sostituzioni e sostituisce l'impostazione predefinita <testResources>
nel POM genitore standard che tutti gli altri POM ereditare da (a meno che l'eredità è cambiato). La copia genitore di serie src/test/resources
, in modo da esigenze imperative che, non otteniamo che copiato come al solito, che non vogliamo. (In particolare, tutto il mio motivo per fare questo è quello di utilizzare unitils, che vuole il file copiato unitils.properties
-. E questo è (per me, comunque) in src/test/resources
Quindi, abbiamo ri-add src/test/resources
:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
Che copie nell'ordine indicato, in modo che per i file che esistono in entrambi /src/test/java
(e le sottodirectory) e in /src/test/resources
(e sottodirectory), la versione src/test/resources
è quella che finisce in test-classes
.
Ora abbiamo solo bisogno di non copiare i file .java
:
<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>
L'unico modo che ha funzionato per me quando ho messo la mia configurazione di prova nella cartella src/test/resources
(analogo src/test/java
per i file di origine). I file di questa cartella vengono copiati nella cartella target/test-classes
che si trova sul percorso di classe durante l'esecuzione test. Non so perché, ma la prossima config non ha funzionato per me:
<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>
E 'possibile ottenere Maven per copia risorse da src / test / java?
Sì, questo è facilmente ottenibile con la antrun plug .