提交 c4a7e886 编写于 作者: J jfdenise

8136365: Provider "jrt" is not available after bootmodules.jimage recreation

Summary: META-INF content was lost during recreate.
Reviewed-by: jlaskey, sundar
上级 f44d46ed
......@@ -261,6 +261,7 @@ public final class ImageFileCreator {
Map<String, List<Entry>> entriesForModule,
ByteOrder byteOrder) throws IOException {
ResourcePoolImpl resources = new ResourcePoolImpl(byteOrder);
// Doesn't contain META-INF
Set<String> mods = modulePackagesMap.keySet();
for (String mn : mods) {
for (Entry entry : entriesForModule.get(mn)) {
......@@ -286,6 +287,31 @@ public final class ImageFileCreator {
Archive archive = nameToArchive.get(mn);
archive.close();
}
// Fix for 8136365. Do we have an archive with module name "META-INF"?
// If yes, we are recreating a jimage.
// This is a workaround for META-INF being at the top level of resource path
String mn = "META-INF";
Archive archive = nameToArchive.get(mn);
if (archive != null) {
try {
for (Entry entry : entriesForModule.get(mn)) {
String path = entry.name();
try (InputStream stream = entry.stream()) {
byte[] bytes = readAllBytes(stream);
path = mn + "/" + path;
try {
resources.addResource(new ResourcePool.Resource(path,
ByteBuffer.wrap(bytes)));
} catch (Exception ex) {
throw new IOException(ex);
}
}
}
} finally {
// Done with this archive, close it.
archive.close();
}
}
return resources;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册