Maven's Surefire (testing) pluginmvn test-compile
copies files in src/test/resources
to target/test-classes
. It compiles .java
in src/test/java
, and copies the compiled .class
files to target/test-classes
.
But it doesn't copy resources from src/test/java
, and it's more convenient to be able to put test resources in the same directory as the .java
classes they are resources for, than in a parallel hierarchy in src/test/resources
.
Is it possible to get Maven to copy resources from src/test/java
?
bmargulies gave the answer, but let me fill in some details.
<testresources>
can be added to the<build>
node of the project's POM, like this:That copies everything in
src/test/java
-- including the.java
source code, which we don't want.It also (as bmargulies only hinted at) overrides and replaces the default
<testResources>
setting in the standard parent POM that all other POM inherit from (unless that inheritance is changed). The standard parent copiessrc/test/resources
, so by overriding that, we don't get that copied as usual, which we don't want. (In particular, my whole reason for doing this is to use unitils, which wants theunitils.properties
file copied -- and that's (for me, anyway) insrc/test/resources
.So we re-add
src/test/resources
:That copies in the order listed, so that for files that exist in both
/src/test/java
(and subdirectories) and in/src/test/resources
(and subdirectories), thesrc/test/resources
version is the one that ends up intest-classes
.Now we just need to not copy the
.java
files:Yes, this is easily achieved with the antrun plugin.
The resource copying is all done by the maven-resource-plugin, and if you read the doc thereof you will see how to add copying of resources from src/test/java.
See http://maven.apache.org/plugins/maven-resources-plugin/testResources-mojo.html for the test-resources goal, which is included in the default lifecycle.
And then see http://maven.apache.org/pom.html, and look for
<testResources>
.The only way it worked for me when I put my test configuration into
src/test/resources
folder (analogue ofsrc/test/java
for source files). Files from this folder is copied to thetarget/test-classes
folder which is on the classpath during the tests execution. I don't know why, but the next config didn't work for me: