Thanks for the answer Remi. I'm wondering if a (optional) build step is considered. During build the byte code analysis that jdeps does could be used to generate better metadata for automatic modules. This would be a compromise between using automatic modules without this metadata and actually adding a module-info to a JAR file (which isn't a great option for 3rd party libs).
I've looked at several (small) code bases now, and using default modules keep resulting in a long list of transitive dependencies that I would prefer not to have in my module. Because of that a top down migration process doesn't result in proper modules when using automatic modules, and that would be a bad start when migrating to modules. The required trial and error work will frustrate users as well. Paul > On 22 Apr 2016, at 11:12, Remi Forax <fo...@univ-mlv.fr> wrote: > > Hi Paul, > > ----- Mail original ----- >> De: "Paul Bakker" <paul.bakker...@gmail.com> >> À: jigsaw-dev@openjdk.java.net >> Envoyé: Vendredi 22 Avril 2016 10:52:23 >> Objet: requires public for automatic modules >> >> 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? >> > > because it will require the runtime to parse the bytecode of an automatic > module, which is a slow operation. > >> 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 >> >> >> > > regards, > > Rémi