DetermineJavaVersion determines the major Java version from a Java installation by reading the JAVA_VERSION field from the release file. Parameters: - javaHome: Path to the Java installation (e.g., /deps/0/jre) Returns the major version (8, 11, 17, etc.) or an error if unable to determine. Exampl
(javaHome string)
| 62 | // |
| 63 | // version, err := DetermineJavaVersion("/deps/0/jre") |
| 64 | func DetermineJavaVersion(javaHome string) (int, error) { |
| 65 | |
| 66 | releaseFile := filepath.Join(javaHome, "release") |
| 67 | content, err := os.ReadFile(releaseFile) |
| 68 | if err != nil { |
| 69 | return 17, fmt.Errorf("failed to read release file: %w", err) |
| 70 | } |
| 71 | |
| 72 | // Parse JAVA_VERSION from release file |
| 73 | // Format: JAVA_VERSION="1.8.0_422" or JAVA_VERSION="17.0.13" |
| 74 | lines := strings.Split(string(content), "\n") |
| 75 | for _, line := range lines { |
| 76 | if !strings.HasPrefix(line, "JAVA_VERSION=") { |
| 77 | continue |
| 78 | } |
| 79 | |
| 80 | // Extract version string from JAVA_VERSION="..." |
| 81 | version := strings.Trim(strings.TrimPrefix(line, "JAVA_VERSION="), "\"") |
| 82 | |
| 83 | // Handle Java 7/8 format: 1.8.x or 1.7.x |
| 84 | if strings.HasPrefix(version, "1.8") { |
| 85 | return 8, nil |
| 86 | } |
| 87 | if strings.HasPrefix(version, "1.7") { |
| 88 | return 7, nil |
| 89 | } |
| 90 | |
| 91 | // Handle Java 9+ format: major version is first number |
| 92 | // Examples: "11.0.1", "17.0.13", "21.0.1" |
| 93 | dotIndex := strings.Index(version, ".") |
| 94 | if dotIndex > 0 { |
| 95 | majorStr := version[:dotIndex] |
| 96 | if major, err := strconv.Atoi(majorStr); err == nil { |
| 97 | return major, nil |
| 98 | } |
| 99 | } |
| 100 | } |
| 101 | |
| 102 | return 17, fmt.Errorf("unable to parse Java version from release file") |
| 103 | } |
| 104 | |
| 105 | // GetJavaMajorVersion returns the Java major version from the JAVA_HOME environment variable. |
| 106 | // This is a convenience wrapper around DetermineJavaVersion that reads JAVA_HOME from the environment. |
no outgoing calls
no test coverage detected