> If you are in a hacky mood, there is a simple solution to transform an automatic module to an explicit one, > create a module-info.java, compile it and update the jar of the automatic module with the module-info.class
I'm working on a Maven plug-in, ModiTect, which largely automates that task. E.g. here is an example which adds the required descriptors to Undertow (a web server) as well as its dependencies and then creates a runtime image from that: https://github.com/moditect/moditect/blob/master/integrationtest/undertow/pom.xml Needless to say, that having the upstream project provide explicit modules is the favourable approach. 2017-09-02 13:43 GMT+02:00 <fo...@univ-mlv.fr>: > > De: "Rahman USTA" <rahman.usta...@gmail.com> > > À: "Remi Forax" <fo...@univ-mlv.fr> > > Cc: "Alex Buckley" <alex.buck...@oracle.com>, "jigsaw-dev" > > <jigsaw-dev@openjdk.java.net> > > Envoyé: Samedi 2 Septembre 2017 13:30:24 > > Objet: Re: Moving to Java 9 - module-info.class not found for > <module-name> > > module > > > Thank you, Remi and Alex. > > I think automatic modules can be supported by jlink. It could be a > transition > > feature like --illegal-access imho. > > The whole idea of jlink is that unlike classical Java it works under the > assumption that the world is closed i.e. all the bytecodes that will be > loaded is known, so it can do "whole world" optimizations like i know all > the lambda forms that will be used by the string concatenation because i > know all the call sites that does string concatenation so i can > pre-generate them. > If you have an automatic module, it can have dependencies on jars from the > classpath, the close world assumption does not hold. > > If you are in a hacky mood, there is a simple solution to transform an > automatic module to an explicit one, create a module-info.java, compile it > and update the jar of the automatic module with the module-info.class or > better ask the maintainer of the jar to do the work for you :) > > > Kind regards. > > regards, > Rémi > > > 2017-09-02 0:59 GMT+03:00 Remi Forax < [ mailto:fo...@univ-mlv.fr | > > fo...@univ-mlv.fr ] > : > > >> As Alex said, > >> jackson.databind is not an explicit module. > > >> You should report that issue to their bugtracker. > > >> cheers, > >> Rémi > > >> ----- Mail original ----- > >>> De: "Alex Buckley" < [ mailto:alex.buck...@oracle.com | > alex.buck...@oracle.com > >> > ] > > >>> À: "jigsaw-dev" < [ mailto:jigsaw-dev@openjdk.java.net | > >> > jigsaw-dev@openjdk.java.net ] > > >> > Envoyé: Vendredi 1 Septembre 2017 23:06:16 > >>> Objet: Re: Moving to Java 9 - module-info.class not found for > <module-name> > >> > module > > >> > On 9/1/2017 1:21 PM, Rahman USTA wrote: > >> >> java --module-path > >> >> %JAVA_HOME%/jmods;target\terminalfx.jar;target\dependency > --add-modules > >> >> terminalfx -m terminalfx/com.terminalfx.AppStarter > > >> > (You shouldn't need the --add-modules, since terminalfx is already the > >> > main module.) > > >> >> It works normally. Then, I want to generate a jlink image with the > >> >> following script > > >> >> jlink --module-path > >> >> %JAVA_HOME%/jmods;target\terminalfx.jar;target\dependency > --add-modules > >> >> terminalfx --launcher terminalfx=terminalfx/com. > terminalfx.AppStarter > >> >> --output target/release > > >> >> However it gives me the following error; > > >> >> Error: module-info.class not found for jackson.databind module > > >> > I suspect jackson.databind is an automatic module. jlink does not > >> > support linking of automatic modules because they can rely on the > >> > arbitrary content of the classpath, which goes against the idea of a > >> > self-contained Java runtime. > > >> > Alex > > > -- > > Rahman USTA > > Istanbul JUG > > [ https://github.com/rahmanusta | https://github.com/rahmanusta ] >