requires public for automatic modules
Paul Bakker
paul.bakker.nl at gmail.com
Fri Apr 22 08:52:23 UTC 2016
Hello,
I'm experimenting with automatic modules again. I have a module "demonstrator" that uses Jackson Databind.
import com.fasterxml.jackson.databind.ObjectMapper;
....
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(modularityBook);
In module-info.java I have the following:
requires jackson.databind;
On the modulepath I have jackson.core, jackson.databind and jackson.annotations.
Building results in an error:
class file for com.fasterxml.jackson.core.Versioned not found
This makes sense because the ObjectMapper class that I'm using implements the Versioned interface (from jackson.core).
When generating a module-info.java using jdeps for the jackson.databind JAR however, it generates the following:
requires public jackson.annotations;
requires public jackson.core;
This is much closer to what I would expect when using the jackson.databind module.
When using jackson.databind as an automatic module, I will end up with a list of requires for transitive dependencies that I shouldn't have to care about.
Why don't automatic modules take better care of transitive dependencies, so that the application's module-info looks similar to what it would after transforming the dependencies to named modules?
Also, jdeps doesn't actually show this problem when looking at the code when still on the classpath:
jdeps -cp lib/jackson-databind-2.7.3.jar out/com/javamodularity/demonstrator/Demo.class
Demo.class -> lib/jackson-databind-2.7.3.jar
Demo.class -> java.base
com.javamodularity.demonstrator (Demo.class)
-> com.fasterxml.jackson.databind jackson-databind-2.7.3.jar
-> java.io
-> java.lang
Best regards,
Paul Bakker
More information about the jigsaw-dev
mailing list