On 23/02/2018 19:18, Mark Raynsford wrote:
The JarFile API does this for you. Are you sure you've used the
constructor that specifies the runtime version? Once you do that then
getJarEntry("module-info.class") will locate the module-info.class in
the versioned section. Use JarEntry::getRealName to satisfy yourself
that it always locates the right one (say where you have a
module-info.class in the top-level directory and one each in
META-INF/versions/9 and META-INF/versions/10).
I'm analyzing the contents of jar files and basically need to answer
the question "is this jar file modularized?". To do this, I search for
a module-info.class file in the root of the jar file (and parse it with
ASM), or I look for an Automatic-Module-Name entry in the jar manifest
if there doesn't appear to be a module descriptor available.
Unfortunately, some projects don't put the module-info.class file in
the root of the jar. Some of them place them in
META-INF/versions/9/module-info.class, for example. I could search
every possible subdirectory in the jar for something that looks like a
module-info.class, but I'd prefer not to have to. Is there a standard
method in the JDK that can find the module descriptor class file for me
based on the rules the JVM uses to find the descriptor upon loading a
ModuleDescriptor.read is an easy way to parse the module-info.class in
case you need it.