On 16/12/2015 09:27, Martin Balin wrote:
I've encountered this problem with jlink as well. The scenario was different. I used modular jar files produced by NetBeans with jigsaw build. NetBeans uses Ant jar task to create jar files. At this moment we run NB on top of JDK8 and Jigsaw is referenced as Project Java platform. Therefore NetBeans produces jar file using jar task based on JDK8 which is not compatible with JDK9 jlink.

I found that I can run these NB produced modular jar files on Jigsaw e.g.
> "java -mp.... -m <module_name/fully_qualified_main_class>"

But I cannot run such modular jigsaw app when packaged by jlink. Even specifying Main class does not help. It needs to be packaged by jar utility from jigsaw in order to be runnable in jlink.

Is this going to be defined somewhere? E.g. Jigsaw jar utility specification and how it changed from JDK8 jar.

One we fix this issue then it should resolve this case too and there should be no issue creating the JAR files with older versions of the jar tool or any zip tool.

As to what is going on? The set of exported packages are in the Module class file attribute. There may be other non-exported packages and as an optimization to avoid scanning the contents of the JAR, then this set of packages can be stored in the optional ConcealedPackages class file attribute. The jar and jmod tools add or update this attribute, older versions of the jar tool or zip programs don't know anything about it. When the attribute is not present then the contents of the JAR file will be scanned or the file system will be scanned in the case of an exploded module.

There is a missing piece when we get to jlink and the run-time images. The code that reconstitutes the set of modules descriptors in the run-time image assumes the ConcealedPackages attribute is present. This works great when the modules are in JMOD format or generated with the updated jar tool but doesn't work when the modules don't have this attribute. The original intention was it be generated at link-time. We've since moved on much further to generate code at link time to speed up the reconstitution of the module descriptors. I initially thought `jlink --gen-installed-modules off` would be a workaround for Sebastian but there is a bit more to it. So I think the "TODO" needs a priority boost.

-Alan

Reply via email to