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