--- old/src/jdk.zipfs/share/classes/jdk/nio/zipfs/JarFileSystem.java 2019-09-19 10:01:16.000000000 -0400 +++ new/src/jdk.zipfs/share/classes/jdk/nio/zipfs/JarFileSystem.java 2019-09-19 10:01:16.000000000 -0400 @@ -62,16 +62,16 @@ super(provider, zfpath, env); if (isMultiReleaseJar()) { int version; - Object o = env.get("multi-release"); + Object o = getRuntimeVersion(env); if (o instanceof String) { String s = (String)o; if (s.equals("runtime")) { version = Runtime.version().feature(); } else { - version = Integer.parseInt(s); + version = Version.parse(s).feature(); } } else if (o instanceof Integer) { - version = (Integer)o; + version = Version.parse(((Integer)o).toString()).feature(); } else if (o instanceof Version) { version = ((Version)o).feature(); } else { @@ -83,6 +83,18 @@ } } + /** + * Utility method to get the release version for a multi-release JAR. It + * first checks the documented property {@code releaseVersion} and if not + * found checks the original property {@code multi-release} + * @param env ZIP FS map + * @return release version or null if it is not specified + */ + private Object getRuntimeVersion(Map env) { + Object o = env.get(ZipFileSystemProvider.RELEASE_VERSION); + return o != null ? o : env.get(ZipFileSystemProvider.MULTI_RELEASE); + } + private boolean isMultiReleaseJar() throws IOException { try (InputStream is = newInputStream(getBytes("/META-INF/MANIFEST.MF"))) { String multiRelease = new Manifest(is).getMainAttributes()