< prev index next >
src/jdk.zipfs/share/classes/jdk/nio/zipfs/JarFileSystem.java
Print this page
@@ -60,20 +60,20 @@
JarFileSystem(ZipFileSystemProvider provider, Path zfpath, Map<String,?> env) throws IOException {
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 {
throw new IllegalArgumentException("env parameter must be String, Integer, "
+ "or Version");
@@ -81,10 +81,22 @@
createVersionedLinks(version < 0 ? 0 : version);
setReadOnly();
}
}
+ /**
+ * 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<String, ?> 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()
.getValue(Attributes.Name.MULTI_RELEASE);
return "true".equalsIgnoreCase(multiRelease);
< prev index next >