Getting the automatic module name of non-modular JAR

Gunnar Morling gunnar at hibernate.org
Wed Apr 26 08:14:29 UTC 2017


It's described in the JavaDoc of ModuleFinder#of():

    http://download.java.net/java/jdk9/docs/api/java/lang/module/ModuleFinder.html#of-java.nio.file.Path...-

Not sure whether there's another more authoritative source.

2017-04-26 10:08 GMT+02:00 Cédric Champeau <cedric.champeau at gmail.com>:
> Is there a specification of how the automatic module name is built? I'm
> asking because we will likely have to do something like that in Gradle, and
> we cannot use JDK 9 specific APIs for this (Gradle can run on JDK 8, for
> example, while the compiler would be forked to use JDK 9, so JDK 9 APIs may
> not be available).
>
> 2017-04-25 22:03 GMT+02:00 Gunnar Morling <gunnar at hibernate.org>:
>
>> 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