javanetbeansnetbeans-10

NetBeans 10 JUnit Jar not found


I have a new installation of NetBeans 10. Trying to run some initial unit tests I just created, I get the following error:

The <classpath> or <modulepath> for <junit> must include junit.jar if not in Ant's own classpath

I could probably hack the build script to include junit.jar, but I want to know: what's the right way to fix this?

Shouldn't NetBeans come with a version of JUnit already accessible? Should I configure my project differently? How do I add a path to the library?

How can I find the classpath for Ant (and what version/binary NetBeans is using)?

The project Test Libraries shows that JUnit 5.3.1 is present, I have three Jar files listed there: junit-jipiter-api, junit-jupiter-params, junit-jupiter-engine. But it seems to be not actually found.

The project is a standard Java Library (no main class). I didn't add any "extras" or mess with the default project setup that NetBeans uses. Just used the basic setup wizard thing.


Re. a reply from the NetBeans mailing list by Geertjan Wielenga, he pointed me at this thread and reply:

Yep...

We never got around to implementing JUnit 5 support for Ant based projects in NB 10.

John McDonnell

http://mail-archives.apache.org/mod_mbox/netbeans-users/201901.mbox/%3cCAAuDyk6WcgLaUDz0dp=4Arr7QGnwWcYey3VOeGojRRMRqVZrFA@mail.gmail.com%3e

So I think it's just not going to work. I'll try the suggested reversion to JUnit 4 below.


Update for 2025 and Netbeans 25. It still doesn't work. However I did find this article that explains the problem. The issue is that Netbeans relies on Maven to include transitive dependencies. This capability doesn't exist in Ant (an older build system) so the JUnit 5 dependencies are not loaded. Here's a quick description of what to do if you want JUnit 5 to work and not revert to JUnit 4:

That is not a pretty picture in the end, when compared to JUnit 4, where you had just that JAR, plus Hamcrest. With JUnit 5, you need, in addition to junit-jupiter-api, junit-jupiter-params, and junit-jupiter-engine, to also declare the transitive dependency apiguardian-api, while in the case of Apache Ant, you need to deal with the JUnitLauncher, if you want to make use of the new junitlauncher Ant task, in addition to four other JARs, which need to be on Ant’s classpath, as explained here.

Here's an image with the final libraries all included:

All libraries


Solution

  • I'm running netbeans 10 as well, in xubuntu if that helps. I have no idea what is going on, so I had to revert to junit4. EDIT: To be perfectly clear, ant needs junit.jar which is nowhere to be found in the default netbeans 10 installation. Until someone brings a better solution, revert to junit4:

    1) in your test libraries, right click and import the junit 4.1.2 ones.

    2) remove the junit 5.3 ones.

    3) scrap all the imports in your test file and use the junit4 ones. ie your imports will look like:

    import static junit.framework.Assert.assertEquals;
    import org.junit.Test;
    import org.junit.*;
    /*import org.junit.jupiter.api.AfterEach;
    import org.junit.jupiter.api.AfterAll;
    import org.junit.jupiter.api.BeforeEach;
    import org.junit.jupiter.api.BeforeAll;
    import org.junit.jupiter.api.Test;*/
    

    4) scrap the beforeAll and other test tags. Only leave the @Test one.

    5) save all, close and re-open the project. It will complain that the hamcrest libraries for junit4 are not imported. Allow netbeans to fix it for you.

    With that done, I was able to test successful and failing tests. I guess when you generate the junit tests with the template generator, it will generate the junit5 ones, so, a bit annoying. But you'll have tests!