trying jigsaw-ea-95 jlink
Alan.Bateman at oracle.com
Wed Dec 16 10:19:03 UTC 2015
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
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.
More information about the jigsaw-dev