Getting the automatic module name of non-modular JAR

Gunnar Morling gunnar at hibernate.org
Tue Apr 25 20:03:34 UTC 2017


Right; I find the usage of findAll() + findFirst() not perfect,
though, given it's about a single JAR file to begin with. Hence the
suggestion of a dedicated method for that case. But I'll go with your
suggestion for now. Thanks again.

--Gunnar


2017-04-25 10:03 GMT+02:00 Remi Forax <forax at univ-mlv.fr>:
> If you want an Optional, you can use findFirst() on a stream,
>   Optional<ModuleReference> ref = ModuleFinder.of( jar ).findAll().stream().findFirst();
>
> Rémi
>
> ----- Mail original -----
>> De: "Gunnar Morling" <gunnar at hibernate.org>
>> À: "Alan Bateman" <Alan.Bateman at oracle.com>
>> Cc: "jigsaw-dev" <jigsaw-dev at openjdk.java.net>
>> Envoyé: Mardi 25 Avril 2017 09:10:45
>> Objet: Re: Getting the automatic module name of non-modular JAR
>
>> I see; thanks, Alan.
>>
>> I wanted to avoid using a regex or similar, in order to make sure the
>> JDK's own automatic naming rules are applied instead of
>> "re-implementing" them. I was kinda hoping for a method like
>>
>>    Path jar = ...;
>>    Optional<ModuleReference> ref = ModuleReference.of( jar );
>>
>>
>> 2017-04-25 8:49 GMT+02:00 Alan Bateman <Alan.Bateman at oracle.com>:
>>> On 24/04/2017 21:23, Gunnar Morling wrote:
>>>
>>>> Hi,
>>>>
>>>> Given a non-modular JAR (e.g. represented as Path), what's the easiest
>>>> way to obtain the automatic module name derived for this JAR?
>>>
>>> If you just want the name then it might be more efficient to do it with a
>>> regular expression.
>>>
>>>>
>>>> I found the following:
>>>>
>>>>      Path nonModularJar = ...;
>>>>      String automaticModuleName = ModuleFinder.of( nonModularJar )
>>>>          .findAll()
>>>>          .iterator()
>>>>          .next()
>>>>          .descriptor()
>>>>          .name();
>>>>
>>>> Is this the best I can do?
>>>>
>>>> More generally speaking, is using ModuleFinder with a single path the
>>>> only way to obtain a ModuleReference/ModuleDescriptor for a specific
>>>> JAR?
>>>
>>> Yes, ModuleFinder is the only way (it might be more succulent to use stream
>>> + findFirst but that is just detail). If you are only interested in the name
>>> then you could of course open the JAR file. If it contains module-info.class
>>> then read it with ModuleDescriptor.read, otherwise use a regex to derive the
>>> name.
>>>
>> > -Alan


More information about the jigsaw-dev mailing list