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 <gun...@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 <fo...@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" <gun...@hibernate.org> > >> À: "Alan Bateman" <alan.bate...@oracle.com> > >> Cc: "jigsaw-dev" <jigsaw-dev@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.bate...@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 >