IntelliJ can't find classpath test resource

JavaIntellij IdeaClasspath

Java Problem Overview


I'm having a problem where IntelliJ 13.1.4, when running a unit test, can't find a ServiceLoader file in the src/test/resources directory of my module.

Please note before answering that I've done all of the following:

  1. The module is a Gradle project, and if I run gradle test the unit test runs fine.
  2. I've run this unit test successfully in IntelliJ in the past, and it found the module. (Maybe an earlier version of IntelliJ?)
  3. I've double checked the IntelliJ module settings and the src/test/resources directory is marked as being a test resources directory. (See screenshot below.)
  4. I'm dumping the unit test class's classloader's classpath in the class; it has the build/classes/test/ and build/classes/java directories, but neither build/resources/test/ nor build/resources/main/.
  5. I've clicked the button to refresh all Gradle projects.

Any ideas on what else could be causing IntelliJ to fail here?


Screenshot of my module configuration, showing the Test Resource Folders setting.

My Test Resource Folders is correctly set.

Java Solutions


Solution 1 - Java

I managed to get it working better by creating a test-resources directory parallel to the test directory (!).

Still seeing intermittent problems with this, though. Those times, it's possible to open the IntelliJ project settings and define the test resources as source instead (the Gradle project will remain unchanged).

Must be an IntelliJ bug, as I've experienced the same thing in Android Studio.

EDIT:

I found a workaround to the issue.

Add the following at the end of the Gradle config (and specify your test resources path):

task copyTestResources(type: Copy) {
    from "${projectDir}/src/test/resources"
    into "${buildDir}/classes/test"
}
processTestResources.dependsOn copyTestResources

Solution 2 - Java

I face a similar issue with IntelliJ 14. Despite having the necessary files in my resources folder and ensuring that the folder is specified as a resource in the module settings, IntelliJ intermittently fails to load my files onto the classpath.

One workaround is to add the required folder as a dependency for the module in the module settings.

enter image description here

First, click on the "+" button to add a new dependency.

enter image description here

Then, select the folder you wish to add to the classpath.

enter image description here

Then select the "classes" option.

enter image description here

Once that is done, re-build your module once and hopefully that should do the trick.

Ideally this should not at all be an issue. All files in the resource folder should directly be put in the classpath. However, every IDE has it's quirks.

Solution 3 - Java

When I was running into the same issue, it worked for me to once unmark the resources directory as resources root and then mark it again as resources root:

  1. Right click on resources folder > Mark directory as ... > Unmark as Resources Root
  2. Right click on resources folder > Mark directory as ... > Test Resources Root

Solution 4 - Java

In my case, I simply ran the tests through maven command line, i.e. a basic mvn clean install. After that it worked in IDEA.

Solution 5 - Java

When there is a multi-module project, IntelliJ tends to set the top module as the working directory. If this this the case, one can try changing it to the sub-module directory.

Solution 6 - Java

If your project is multi maven and other answers did not work, try this one.

Change the working directory in intellij. Right Click, go to edit configuration, select the required maven project directory you want to run.

enter image description here

Solution 7 - Java

For me, Build -> Recompile created out folder described in Project Structure. then it could find my classes. enter image description here

Solution 8 - Java

I ran into the same issue, where Junit was failing(FileNotFound) because I had space in my root project folder. eg: my project/project1/....

  • I removed the space from the root folder, my_project/project1/ all test passed properly.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLuis CasillasView Question on Stackoverflow
Solution 1 - JavaKristofer SommestadView Answer on Stackoverflow
Solution 2 - JavaAditya SatyavadaView Answer on Stackoverflow
Solution 3 - JavaHenning HeitkötterView Answer on Stackoverflow
Solution 4 - JavamanywaysView Answer on Stackoverflow
Solution 5 - JavaZaziroView Answer on Stackoverflow
Solution 6 - Javauser11202539View Answer on Stackoverflow
Solution 7 - JavaMiae KimView Answer on Stackoverflow
Solution 8 - Javaakshaymittal143View Answer on Stackoverflow