|
22 | 22 |
|
23 | 23 | import java.io.BufferedReader; |
24 | 24 | import java.io.File; |
| 25 | +import java.io.FileReader; |
25 | 26 | import java.io.IOException; |
26 | 27 | import java.io.InputStream; |
27 | 28 | import java.io.InputStreamReader; |
|
38 | 39 | import java.util.regex.Pattern; |
39 | 40 |
|
40 | 41 | import fish.payara.eclipse.tools.server.sdk.logging.Logger; |
| 42 | +import fish.payara.eclipse.tools.server.sdk.server.JDK; |
| 43 | +import fish.payara.eclipse.tools.server.sdk.server.JDK.Version; |
41 | 44 | import fish.payara.eclipse.tools.server.sdk.server.config.JavaSEPlatform; |
42 | 45 |
|
43 | 46 | /** |
@@ -274,63 +277,32 @@ public static JavaVersion javaVmVersion(File javaVm) { |
274 | 277 | return new JavaVersion(major, minor, revision, patch); |
275 | 278 | } |
276 | 279 |
|
277 | | - public static String getJavaVersionString(String javaHome) { |
278 | | - return getJavaVersionString(new File(javaVmExecutableFullPath(javaHome))); |
279 | | - } |
280 | | - |
281 | | - public static String getJavaVersionString(File javaVm) { |
282 | | - List<String> javaVersions = new ArrayList<>(); |
283 | | - |
284 | | - try { |
285 | | - CodeSource src = JavaVersionDetector.class.getProtectionDomain().getCodeSource(); |
286 | | - if (src != null) { |
287 | | - |
288 | | - String className = JavaVersionDetector.class.getName(); |
289 | | - String classFileName = JavaVersionDetector.class.getSimpleName() + ".class"; |
290 | | - String classFilePackage = JavaVersionDetector.class.getPackage().getName().replace('.', '/'); |
291 | | - |
292 | | - URL classURL = JavaVersionDetector.class.getResource(classFileName); |
293 | | - |
294 | | - if (classURL != null) { |
295 | | - try (InputStream inputStream = classURL.openConnection().getInputStream()) { |
296 | | - |
297 | | - Path rootClassPath = Files.createTempDirectory("JavaVersionDetector"); |
298 | | - |
299 | | - Files.copy( |
300 | | - inputStream, |
301 | | - Files.createDirectories(rootClassPath.resolve(classFilePackage)) |
302 | | - .resolve(classFileName)); |
303 | | - |
304 | | - Process process = new ProcessBuilder( |
305 | | - javaVm.getAbsolutePath(), |
306 | | - VM_CLASSPATH_OPTION, rootClassPath.toAbsolutePath().toString(), |
307 | | - className) |
308 | | - .start(); |
309 | | - |
310 | | - try (Scanner scanner = new Scanner(process.getErrorStream())) { |
311 | | - scanner.useDelimiter("\\A") |
312 | | - .forEachRemaining(e -> javaVersions.add(e)); |
313 | | - } |
314 | | - |
315 | | - } |
316 | | - } |
317 | | - } |
318 | | - } catch (Exception e) { |
319 | | - LOGGER.log(WARNING, "javaVmVersion", "Caught exception when getting VM version", e); |
320 | | - } |
321 | | - |
322 | | - if (!javaVersions.isEmpty()) { |
323 | | - return javaVersions.get(0); |
324 | | - } |
325 | | - |
326 | | - JavaVersion version = javaVmVersion(javaVm); |
327 | | - |
328 | | - if (version != null) { |
329 | | - return version.toString(); |
330 | | - } |
331 | | - |
332 | | - return null; |
333 | | - } |
| 280 | + public static Version getJavaVersion(String javaHome) { |
| 281 | + Version javaVersion = null; |
| 282 | + if(javaHome != null) { |
| 283 | + try (BufferedReader bufferedReader |
| 284 | + = new BufferedReader(new FileReader(new File(javaHome, "release")));) { // NOI18N |
| 285 | + String implementorLine = null; |
| 286 | + String javaVersionLine = null; |
| 287 | + String line; |
| 288 | + while ((line = bufferedReader.readLine()) != null) { |
| 289 | + if (line.startsWith("JAVA_VERSION=")) { // NOI18N |
| 290 | + javaVersionLine = line; |
| 291 | + } else if (line.startsWith("IMPLEMENTOR=")) { // NOI18N |
| 292 | + implementorLine = line; |
| 293 | + } |
| 294 | + } |
| 295 | + if (javaVersionLine != null) { |
| 296 | + String version = javaVersionLine.substring(javaVersionLine.indexOf("\"") + 1, javaVersionLine.lastIndexOf("\"")); // NOI18N |
| 297 | + String vendor = implementorLine != null ? implementorLine.substring(implementorLine.indexOf("\"") + 1, implementorLine.lastIndexOf("\"")) : null; // NOI18N |
| 298 | + javaVersion = JDK.getVersion(version, vendor); |
| 299 | + } |
| 300 | + } catch (IOException ex) { |
| 301 | + LOGGER.log(WARNING, "javaVmVersion", "Caught exception when getting VM version", ex); |
| 302 | + } |
| 303 | + } |
| 304 | + return javaVersion; |
| 305 | + } |
334 | 306 |
|
335 | 307 | /** |
336 | 308 | * Build Java VM executable full path from Java Home directory. |
|
0 commit comments