is ClassLoader.loadClass() supposed to work on module-info classes?
Alex Buckley
alex.buckley at oracle.com
Fri Dec 4 23:17:51 UTC 2015
On 12/4/2015 4:59 AM, David M. Lloyd wrote:
> On 12/03/2015 07:03 PM, Alex Buckley wrote:
>> On 12/3/2015 4:47 AM, David M. Lloyd wrote:
>>> On 12/02/2015 04:49 PM, Alex Buckley wrote:
>>>> Now we reach the disagreement. We don't think the module declaration
>>>> will be as fluid as you do. Yes, frameworks and other tools will
>>>> want to
>>>> modify module declarations (usually by addition of dependencies or
>>>> exports) but that's a handful of actors, all of whom are perfectly
>>>> capable of using ASM. 99.99% of humans have no business modifying
>>>> someone else's module declaration by hand, so there is no reason for it
>>>> to be easy.
>>>
>>> I am baffled as to the basis for this assertion. This kind of change in
>>> fact happens (present tense) frequently - very frequently if you have
>>> any kind of system for updates. Modules get split or merged,
>>> implementations from one vendor get swapped out for another, multiple
>>> versions of things are introduced. I honestly can say that I do not
>>> understand how the Jigsaw team arrives at this kind of conclusion with
>>> literally zero production experience!
>>
>> If you're splitting or merging modules -- especially someone else's! --
>> then you need to let the compiler check that the newly factored modules
>> are well-formed: they export packages that they actually contain, and
>> they don't read anything that would lead to a split package. (The
>> constraints in j.l.m.Configuration::resolve, basically.)
>
> So you're saying that if I have C depending on A, then update A or I
> split A and B in my distribution, I need to recompile C? I don't think
> that's a realistic proposition. Do I then have to recompile things that
> depend on C? Or things that depend on those things? How would updates
> work in such a scenario? Do I need to put the dependency versions of
> every dependency in my version string so that I can tell the difference
> between C compiled with the original A versus C compiled with the new A/B?
No, you don't need to recompile C. You need to recompile A, or A and B,
as they are the "newly factored modules" that the compiler needs to
check. At no point and in no way did I imply recompiling the unknowable
set of modules which depend on the module-which-gets-split or the
modules-which-get-merged.
Alex
More information about the jigsaw-dev
mailing list