Eclipse oxygen; windows 7; JDK 9 final from 9, 21; JUnit 4.12 and an existing application. As starting point the application can be compiled, executed and all JUnit Tests shows green. Now we use eclipse to generate the file module-info.java. The outcome looks like:
module ch.commcity.topsort {
exports ch.commcity.topsort;
requires junit;
}
But with the error: junit cannot be resolved to module. The question is: How to tell the file that junit does not define any module and it should be run in compatibility mode?
Your question seems to be based on several misconceptions:
module-info.java
whether JUnit defines a module or not. If a module says it requires another module then the compiler expects that module to be present - no way around that.I recommend to give the outstanding State of the Module System a thorough read and then ask yourself what exactly you are trying to accomplish. Are you really trying to create a module that depends on JUnit? Or was that just accidental because you use its API for testing. If the latter, you should not depend on it - instead your IDE / build tool needs to figure out how to compile and run your tests.
Expansion on "a module that depends on JUnit"
The module system does not classify dependencies as "compile" or "test" - if a module
requires
another module, it has to be present, always. That means a module thatrequires junit
would force the presence of JUnit. Unless the module provides testing-related features, that is most certainly wrong.In other words,
requires junit
is akin to adding JUnit to a project's POM, using thecompile
scope.Since the module
junit
as generated in the module-info would be an automatic module converted from its artifact. You need to make sure that the jar for Junitjunit:junit:4.12
is available on the modulepath of your project and the module would be resolved itself.In order to make sure of the above, you can check dependencies of your project/module as configured in the IDE to include
junit:4.12:jar
.First, please update your Java 9 support for Eclipse Oxygen or use the latest available release candidate build for Eclipse 4.7.1a (to be released on October 11, 2017).
To add a library or a container to the modulepath of a Java 9 project in Eclipse, open the project's Java Build Path dialog. On the Libraries tab, select the node Modulepath and add your library to it. Make sure to first remove that library from the Classpath node if it is already present there.
As mentioned by others, in your case, the JUnit libraries will be considered as automatic modules.