< prev index next >

src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/ReleaseInfoPlugin.java

Print this page

        

*** 34,43 **** --- 34,45 ---- import java.util.Map; import java.util.Optional; import java.util.Properties; import java.util.Set; import java.util.function.Function; + import java.util.stream.Collectors; + import jdk.tools.jlink.internal.ModuleSorter; import jdk.tools.jlink.internal.Utils; import jdk.tools.jlink.plugin.ResourcePool; import jdk.tools.jlink.plugin.ResourcePoolBuilder; import jdk.tools.jlink.plugin.ResourcePoolEntry; import jdk.tools.jlink.plugin.ResourcePoolModule;
*** 69,79 **** return PluginsResourceBundle.getDescription(NAME); } @Override public Set<State> getState() { ! return EnumSet.of(State.FUNCTIONAL); } @Override public boolean hasArguments() { return true; --- 71,81 ---- return PluginsResourceBundle.getDescription(NAME); } @Override public Set<State> getState() { ! return EnumSet.of(State.AUTO_ENABLED, State.FUNCTIONAL); } @Override public boolean hasArguments() { return true;
*** 85,94 **** --- 87,100 ---- } @Override public void configure(Map<String, String> config) { String operation = config.get(NAME); + if (operation == null) { + return; + } + switch (operation) { case "add": { // leave it to open-ended! source, java_version, java_full_version // can be passed via this option like: //
*** 125,140 **** --- 131,180 ---- @Override public ResourcePool transform(ResourcePool in, ResourcePoolBuilder out) { in.transformAndCopy(Function.identity(), out); + Optional<ResourcePoolModule> javaBase = in.moduleView().findModule("java.base"); + javaBase.ifPresent(mod -> { + // fill release information available from transformed "java.base" module! + ModuleDescriptor desc = mod.descriptor(); + desc.osName().ifPresent(s -> { + release.put("OS_NAME", quote(s)); + }); + desc.osVersion().ifPresent(s -> release.put("OS_VERSION", quote(s))); + desc.osArch().ifPresent(s -> release.put("OS_ARCH", quote(s))); + desc.version().ifPresent(s -> release.put("JAVA_VERSION", + quote(parseVersion(s.toString())))); + desc.version().ifPresent(s -> release.put("JAVA_FULL_VERSION", + quote(s.toString()))); + }); + + // put topological sorted module names separated by space + release.put("MODULES", new ModuleSorter(in.moduleView()) + .sorted().map(ResourcePoolModule::name) + .collect(Collectors.joining(" ", "\"", "\""))); + // create a TOP level ResourcePoolEntry for "release" file. out.add(ResourcePoolEntry.create("/java.base/release", ResourcePoolEntry.Type.TOP, releaseFileContent())); return out.build(); } + // 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 byte[] releaseFileContent() { Properties props = new Properties(); props.putAll(release); ByteArrayOutputStream baos = new ByteArrayOutputStream(); try {
< prev index next >