If you want to enforce that kind of consistency - that no two
application modules should export same named package - it should be
possible to implement a user defined jlink plugin to enforce the same.

-Sundar

On 10/13/2016 12:35 AM, Alan Bateman wrote:
> On 12/10/2016 19:17, Karl Heinz Marbaise wrote:
>
>> Hi,
>>
>> i have a question concerning the jlink command in JDK 9..(EA +138 build)
>>
>> I have created two modules lets call them module A and module B
>> (module-info.java):
>>
>> module A {
>>    requires java.base;
>>    exports com.single.package;
>> }
>>
>> module B {
>>    requires java.base;
>>    exports com.single.package;
>> }
>>
>> both export the same package: com.single.package
>>
>> The question is: Shouldn't the jlink command fail in such cases cause
>> both modules export the same package ?
>>
>> Otherwise it would mean to fail at the time of starting the generated
>> JVM image which I think is too late...
> You can resolve independent modules A and B without error (and get a
> configuration that contains both) because there isn't any module that
> reads both. If you had module C that requires both A and B then you'd
> get an error to say that A and B export com.single.package to C.
>
> So this is why it succeeds at link time. There isn't any notion of
> class loader at link time and jlink cannot know how the modules will
> be mapped to loaders at run time. jlink could assume that all modules
> will likely be defined to the same class loader and thus reject the
> above but it doesn't.
>
> As to whether the resulting run time image is useful or not then it
> depends on the initial module. If the initial module is C that only
> requires A then it will work, same thing if the initial module is D
> that only requires B. On the other hand, if you do `java -jar X.jar`
> then the initial module is the unnamed module, which by convention,
> will cause all modules in the runtime image with an API to be resolved
> (the module system does not know anything about what X needs). In that
> scenario when A and B will be resolved but will fail when attempting
> to map both to the application class loader. I will guess that is what
> promoted your mail.
>
> -Alan

Reply via email to