< prev index next >
src/jdk.jlink/share/classes/jdk/tools/jlink/builder/DefaultImageBuilder.java
Print this page
*** 53,62 ****
--- 53,63 ----
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Properties;
import java.util.Set;
+ import java.util.stream.Collectors;
import jdk.tools.jlink.internal.BasicImageWriter;
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;
*** 157,167 ****
if (i < modules.size() - 1) {
builder.append(",");
}
i++;
}
! props.setProperty("MODULES", builder.toString());
}
@Override
public void storeFiles(ResourcePool files) {
try {
--- 158,168 ----
if (i < modules.size() - 1) {
builder.append(",");
}
i++;
}
! props.setProperty("MODULES", quote(builder.toString()));
}
@Override
public void storeFiles(ResourcePool files) {
try {
*** 215,237 ****
} 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));
! props.setProperty("JAVA_VERSION", System.getProperty("java.version"));
});
- this.targetOsName = props.getProperty("OS_NAME");
if (this.targetOsName == null) {
throw new PluginException("TargetPlatform attribute is missing for java.base module");
}
Optional<ResourcePoolEntry> release = pool.findEntry("/java.base/release");
--- 216,257 ----
} catch (IOException ex) {
throw new PluginException(ex);
}
}
+ // Parse version string and return a string that includes only version part
+ // leaving "pre", "build" information. See also: java.lang.Runtime.Version.
+ private static String parseVersion(String str) {
+ return Runtime.Version.parse(str).
+ version().
+ stream().
+ map(Object::toString).
+ collect(Collectors.joining("."));
+ }
+
+ private static String quote(String str) {
+ return "\"" + str + "\"";
+ }
+
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", quote(s));
! this.targetOsName = s;
! });
! desc.osVersion().ifPresent(s -> props.setProperty("OS_VERSION", quote(s)));
! desc.osArch().ifPresent(s -> props.setProperty("OS_ARCH", quote(s)));
! desc.version().ifPresent(s -> props.setProperty("JAVA_VERSION",
! quote(parseVersion(s.toString()))));
! desc.version().ifPresent(s -> props.setProperty("JAVA_FULL_VERSION",
! quote(s.toString())));
});
if (this.targetOsName == null) {
throw new PluginException("TargetPlatform attribute is missing for java.base module");
}
Optional<ResourcePoolEntry> release = pool.findEntry("/java.base/release");
< prev index next >