So when modules B, C and D are automatic modules and named module A depends on 
B, A also gets implicit readability to C and D?
What is the reasoning behind this automatic implicit readability? It makes 
migration less reliable I think, because it hides what dependencies a module 
really has.

Paul


> On 24 Apr 2016, at 21:06, Alan Bateman <alan.bate...@oracle.com> wrote:
> 
> 
> On 24/04/2016 10:57, Paul Bakker wrote:
>> Hello,
>> 
>> Another question related to automatic modules.
>> I have the following code:
>>         import com.fasterxml.jackson.core.JsonFactory;
>>         ...
>>      JsonFactory f = new JsonFactory();
>>      System.out.println(f.getCodec());
>> 
>> This code clearly depends on jackson.core. So my module-info contains:
>>      requires jackson.core;
>> 
>> This is as expected. I can change the module-info to the following however 
>> (removing the dependency on jackson.core):
>>      requires jackson.databind;
>> 
>> At first sight, this fails to compile as expected, because the JsonFactory 
>> type comes from jackson.core, not from jackson.databind.
>> But when I add "-addmods jackson.core" to my build command, it builds 
>> successfully! That's not what I would expect, because my module doesn't 
>> declare a dependency on jackson.core. Why does this happen? I would expect 
>> that the -addmods adds the module to the available modules, but does not 
>> magically add read edges to named modules.
>> When removing the "jackson.databind" requires in my module-info, it fails to 
>> compile again, so it looks like jackson.databind somehow leaks types from 
>> jackson.core to my module.
>> 
>> The build command I use is the following:
>>      javac -mp mods -addmods jackson.core -d out -modulesourcepath src 
>> $(find src -name '*.java')
>> 
>> 
> Are both jackson.databind and jackson.core automatic modules in this 
> scenario? I assume so, in which case I think what you are seeing is correct 
> (meaning it should compile). The reason is that automatic modules read all 
> other modules and they also grant implied readability to all other automatic 
> modules. In this example then it is as if jackson.databind `requires public 
> jackson.core` so your module will read jackson.core.
> 
> -Alan

Reply via email to