modulepath and classpath mixture

Alan Bateman Alan.Bateman at oracle.com
Wed Mar 9 09:34:14 UTC 2016


On 08/03/2016 19:13, Robert Scholte wrote:
>
> This is how I thought that -Xpatch would work in short: the 
> module-info in src/main/java and src/test/java have both the same 
> modulename. The module-info in src/test/java specifies the extra 
> required modules (like junit). With -Xpatch the test-classes have 
> access to the non-exported main-classes too.
If the sources in src/test/java are a completely separate module then 
they will have their own module declaration.

If the tests are instead intended to augment the module, say where the 
tests are in the same package as the code under test, they will not have 
their own module declaration. This means no module-info.java in 
src/test/java. As things currently stand then javac -Xmodule:$MODULE 
will ignore the module-info.java when you compile the sources in 
src/test/java. At run-time then you'll get a warning if there is a 
module-info.class found when patching a module.

So I think you will need to get the module name when compiling the 
tests. You should not need the module name when compiling the code in 
src/main/java of course. The complication for the tests as they are 
being compiled "as if" they are part of the module.

As the tests classes in the same module as the main classes then it 
means the tests have access to all public types in the modules (no 
exports are needed). Furthermore, they are in the same package as the 
main classes then they have access to private package types/methods too.

The final part will be running the tests as the injected test classes 
will have dependences on JUnit or TestNG tests. They module declaration 
doesn't declare that it requires those and this is why we need to 
augment it at run-time with -XaddReads so that it reads the JUnit 
module. There are choices here as to whether JUnit is deployed on the 
class path or module path, it can work as either.

-Alan


More information about the jigsaw-dev mailing list