< prev index next >

src/jdk.jlink/share/classes/jdk/tools/jlink/builder/DefaultImageBuilder.java

Print this page

        

*** 32,41 **** --- 32,42 ---- import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; + import java.io.UncheckedIOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.UncheckedIOException; import java.io.Writer; import java.lang.module.ModuleDescriptor;
*** 58,67 **** --- 59,69 ---- import jdk.tools.jlink.internal.plugins.FileCopierPlugin; import jdk.tools.jlink.internal.plugins.FileCopierPlugin.SymImageFile; import jdk.tools.jlink.internal.ExecutableImage; import jdk.tools.jlink.plugin.ResourcePool; import jdk.tools.jlink.plugin.ResourcePoolEntry; + import jdk.tools.jlink.plugin.ResourcePoolModule; import jdk.tools.jlink.plugin.PluginException; /** * * Default Image Builder. This builder creates the default runtime image layout.
*** 142,159 **** this.root = root; this.mdir = root.resolve("lib"); Files.createDirectories(mdir); } ! private void storeFiles(Set<String> modules, Map<String, String> release) throws IOException { if (release != null) { ! Properties props = new Properties(); ! props.putAll(release); ! addModules(props, modules); File r = new File(root.toFile(), "release"); try (FileOutputStream fo = new FileOutputStream(r)) { ! props.store(fo, null); } } } private void addModules(Properties props, Set<String> modules) throws IOException { --- 144,159 ---- this.root = root; this.mdir = root.resolve("lib"); Files.createDirectories(mdir); } ! private void storeFiles(Set<String> modules, Properties release) throws IOException { if (release != null) { ! addModules(release, modules); File r = new File(root.toFile(), "release"); try (FileOutputStream fo = new FileOutputStream(r)) { ! release.store(fo, null); } } } private void addModules(Properties props, Set<String> modules) throws IOException {
*** 189,199 **** return; } modules.add(m.name()); } }); ! storeFiles(modules, files.releaseProperties()); if (Files.getFileStore(root).supportsFileAttributeView(PosixFileAttributeView.class)) { // launchers in the bin directory need execute permission Path bin = root.resolve("bin"); if (Files.isDirectory(bin)) { --- 189,199 ---- return; } modules.add(m.name()); } }); ! storeFiles(modules, releaseProperties(files)); if (Files.getFileStore(root).supportsFileAttributeView(PosixFileAttributeView.class)) { // launchers in the bin directory need execute permission Path bin = root.resolve("bin"); if (Files.isDirectory(bin)) {
*** 217,226 **** --- 217,247 ---- } catch (IOException ex) { throw new PluginException(ex); } } + private Properties releaseProperties(ResourcePool pool) throws IOException { + Properties props = new Properties(); + Optional<ResourcePoolModule> javaBase = pool.moduleView().findModule("java.base"); + javaBase.ifPresent(mod -> { + // fill release information available from transformed "java.base" module! + ModuleDescriptor desc = mod.descriptor(); + desc.osName().ifPresent(s -> props.setProperty("OS_NAME", s)); + desc.osVersion().ifPresent(s -> props.setProperty("OS_VERSION", s)); + desc.osArch().ifPresent(s -> props.setProperty("OS_ARCH", s)); + }); + + Optional<ResourcePoolEntry> release = pool.findEntry("/java.base/release"); + if (release.isPresent()) { + try (InputStream is = release.get().content()) { + props.load(is); + } + } + + return props; + } + /** * Generates launcher scripts. * * @param imageContent The image content. * @param modules The set of modules that the runtime image contains.
*** 315,324 **** --- 336,347 ---- path.toFile().setExecutable(true); break; case CONFIG: writeEntry(in, destFile("conf", filename)); break; + case TOP: + break; case OTHER: if (file instanceof SymImageFile) { SymImageFile sym = (SymImageFile) file; Path target = root.resolve(sym.getTargetPath()); if (!Files.exists(target)) {
< prev index next >