But isn't what your proposing a security issue? Let's say my package A is
in the unnamed module and your package A is in a named module. You
basically took over my code; your classes will be substituted for mine.

Cheers,
Paul

On Wed, Mar 9, 2016 at 2:38 PM, Alex Buckley <alex.buck...@oracle.com>
wrote:

> On 3/9/2016 10:36 AM, Paul Benedict wrote:
>
>>  From the doc:
>> "If a package is defined in both a named module and the unnamed module
>> then
>> the package in the unnamed module is ignored. This preserves reliable
>> configuration even in the face of the chaos of the class path, ensuring
>> that every module still reads at most one module defining a given package.
>> If, in our example above, a JAR file on the class path contains a class
>> file named com/foo/bar/alpha/AlphaFactory.class then that file will never
>> be loaded, since the com.foo.bar.alpha package is exported by the
>> com.foo.bar module."
>>
>> I would like some clarification. Correct me if wrong, but I think this
>> entire paragraph is really meant to be about the perspective from a
>> modularized JAR? If a module has package A, and the unnamed module has
>> package A, then of course the module's package A should win.
>>
>> However, if it is meant to be absolute language, then I disagree.
>>
>> The unnamed module should be coherent among itself. If the unnamed module
>> has package B and relies on classes from package A, it should still be
>> able
>> to see its own package A. I don't think modules should be able to impact
>> how the unnamed module sees itself. That's a surprising situation.
>>
>
> The unnamed module is not a root module during resolution. If your main
> class is in the unnamed module (i.e. you did java -jar MyApp.jar rather
> than java -m MyApp), then the module graph is created by resolving various
> root modules (what are they? separate discussion) and only then is the
> unnamed module hooked up to read every module in the graph.
>
> Hope we're OK so far.
>
> If some named module in the graph exports package A (more than one module
> exporting A? separate discussion), then since the unnamed module reads that
> named module, the unnamed module will access A.* types from that named
> module.
>
> It's hard to imagine the unnamed module NOT accessing A.* types from that
> named module. Primarily, we need to avoid a split package situation where
> code in the unnamed module sometimes accesses A.* types from the named
> module and sometimes from the unnamed module.
>
> You might say, OK, let code in the unnamed module exclusively access A.*
> in the unnamed module rather than exclusively access A.* in the named
> module. Then you have two problems:
>
> 1. There are issues for named modules in the same class loader as the
> unnamed module -- such named modules MUST get A.* from the named module
> rather than the unnamed module, and the class loading mechanism is
> incapable of switching based on accessor. It'll be common for named modules
> to exist in the same class loader as the unnamed module, as modular JARs on
> the modulepath and non-modular JARs on the classpath all end up in the
> application class loader (modular JARs as named modules; non-modular JARs
> jointly as the unnamed module).
>
> 2. While the module system is sure that package A exists in the named
> module, how would the module system possibly know that package A exists in
> the unnamed module? Scanning every class file in every non-modular JAR on
> the classpath at startup sounds bad.
>
> Alex
>

Reply via email to