120 Properties props = new Properties(); 121 try (FileInputStream fis = new FileInputStream(operation)) { 122 props.load(fis); 123 } catch (IOException exp) { 124 throw new UncheckedIOException(exp); 125 } 126 props.forEach((k, v) -> release.put(k.toString(), v.toString())); 127 } 128 break; 129 } 130 } 131 132 @Override 133 public ResourcePool transform(ResourcePool in, ResourcePoolBuilder out) { 134 in.transformAndCopy(Function.identity(), out); 135 136 Optional<ResourcePoolModule> javaBase = in.moduleView().findModule("java.base"); 137 javaBase.ifPresent(mod -> { 138 // fill release information available from transformed "java.base" module! 139 ModuleDescriptor desc = mod.descriptor(); 140 desc.osName().ifPresent(s -> { 141 release.put("OS_NAME", quote(s)); 142 }); 143 desc.osVersion().ifPresent(s -> release.put("OS_VERSION", quote(s))); 144 desc.osArch().ifPresent(s -> release.put("OS_ARCH", quote(s))); 145 desc.version().ifPresent(s -> release.put("JAVA_VERSION", 146 quote(parseVersion(s.toString())))); 147 desc.version().ifPresent(s -> release.put("JAVA_FULL_VERSION", 148 quote(s.toString()))); 149 }); 150 151 // put topological sorted module names separated by space 152 release.put("MODULES", new ModuleSorter(in.moduleView()) 153 .sorted().map(ResourcePoolModule::name) 154 .collect(Collectors.joining(" ", "\"", "\""))); 155 156 // create a TOP level ResourcePoolEntry for "release" file. 157 out.add(ResourcePoolEntry.create("/java.base/release", 158 ResourcePoolEntry.Type.TOP, releaseFileContent())); 159 return out.build(); 160 } 161 162 // Parse version string and return a string that includes only version part 163 // leaving "pre", "build" information. See also: java.lang.Runtime.Version. 164 private static String parseVersion(String str) { 165 return Runtime.Version.parse(str). 166 version(). 167 stream(). 168 map(Object::toString). | 120 Properties props = new Properties(); 121 try (FileInputStream fis = new FileInputStream(operation)) { 122 props.load(fis); 123 } catch (IOException exp) { 124 throw new UncheckedIOException(exp); 125 } 126 props.forEach((k, v) -> release.put(k.toString(), v.toString())); 127 } 128 break; 129 } 130 } 131 132 @Override 133 public ResourcePool transform(ResourcePool in, ResourcePoolBuilder out) { 134 in.transformAndCopy(Function.identity(), out); 135 136 Optional<ResourcePoolModule> javaBase = in.moduleView().findModule("java.base"); 137 javaBase.ifPresent(mod -> { 138 // fill release information available from transformed "java.base" module! 139 ModuleDescriptor desc = mod.descriptor(); 140 desc.version().ifPresent(s -> release.put("JAVA_VERSION", 141 quote(parseVersion(s.toString())))); 142 desc.version().ifPresent(s -> release.put("JAVA_FULL_VERSION", 143 quote(s.toString()))); 144 145 release.put("OS_NAME", quote(mod.osName())); 146 release.put("OS_ARCH", quote(mod.osArch())); 147 }); 148 149 // put topological sorted module names separated by space 150 release.put("MODULES", new ModuleSorter(in.moduleView()) 151 .sorted().map(ResourcePoolModule::name) 152 .collect(Collectors.joining(" ", "\"", "\""))); 153 154 // create a TOP level ResourcePoolEntry for "release" file. 155 out.add(ResourcePoolEntry.create("/java.base/release", 156 ResourcePoolEntry.Type.TOP, releaseFileContent())); 157 return out.build(); 158 } 159 160 // Parse version string and return a string that includes only version part 161 // leaving "pre", "build" information. See also: java.lang.Runtime.Version. 162 private static String parseVersion(String str) { 163 return Runtime.Version.parse(str). 164 version(). 165 stream(). 166 map(Object::toString). |