Getting the automatic module name of non-modular JAR

Cédric Champeau cedric.champeau at gmail.com
Wed Apr 26 08:08:33 UTC 2017


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