mirror of
https://github.com/HMCL-dev/HMCL.git
synced 2025-08-03 11:26:38 -04:00
Update version check logic to support version like "26-ea" (#4128)
Co-authored-by: Glavo <zjx001202@gmail.com>
This commit is contained in:
parent
c3a3881cfc
commit
86c171545e
@ -28,40 +28,53 @@ public final class Main {
|
|||||||
private Main() {
|
private Main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
static int findFirstNotNumber(String str, int start) {
|
||||||
* Check if the current Java version is compatible with HMCL.
|
if (start >= str.length())
|
||||||
*/
|
return -1;
|
||||||
static boolean checkJavaVersion(String javaVersion) {
|
|
||||||
if (javaVersion == null) {
|
char ch = str.charAt(start);
|
||||||
return false;
|
if (ch < '0' || ch > '9')
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
for (int i = start + 1; i < str.length(); i++) {
|
||||||
|
ch = str.charAt(i);
|
||||||
|
if (ch < '0' || ch > '9')
|
||||||
|
return i;
|
||||||
}
|
}
|
||||||
|
return str.length();
|
||||||
|
}
|
||||||
|
|
||||||
|
static int getJavaFeatureVersion(String javaVersion) {
|
||||||
|
if (javaVersion == null)
|
||||||
|
return -1;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
int major;
|
int end = findFirstNotNumber(javaVersion, 0);
|
||||||
int dot = javaVersion.indexOf('.');
|
if (end < 0)
|
||||||
|
return -1; // No valid version number found
|
||||||
|
|
||||||
if (dot >= 0) {
|
int major = Integer.parseInt(javaVersion.substring(0, end));
|
||||||
major = Integer.parseInt(javaVersion.substring(0, dot));
|
if (major > 1)
|
||||||
if (major == 1 && dot < javaVersion.length() - 1) {
|
return major;
|
||||||
int begin = dot + 1;
|
|
||||||
dot = javaVersion.indexOf('.', begin);
|
|
||||||
|
|
||||||
major = dot > begin
|
if (major < 1)
|
||||||
? Integer.parseInt(javaVersion.substring(begin, dot))
|
return -1; // Invalid major version
|
||||||
: Integer.parseInt(javaVersion.substring(begin));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
major = Integer.parseInt(javaVersion);
|
|
||||||
}
|
|
||||||
|
|
||||||
return major >= MINIMUM_JAVA_VERSION;
|
// Java 1.x versions
|
||||||
|
int start = end + 1;
|
||||||
|
end = findFirstNotNumber(javaVersion, start);
|
||||||
|
|
||||||
|
if (end < 0)
|
||||||
|
return -1; // No valid minor version found
|
||||||
|
|
||||||
|
return Integer.parseInt(javaVersion.substring(start, end));
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
return false;
|
return -1; // version number is too long
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws Throwable {
|
public static void main(String[] args) throws Throwable {
|
||||||
if (checkJavaVersion(System.getProperty("java.version"))) {
|
if (getJavaFeatureVersion(System.getProperty("java.version")) >= MINIMUM_JAVA_VERSION) {
|
||||||
EntryPoint.main(args);
|
EntryPoint.main(args);
|
||||||
} else {
|
} else {
|
||||||
String errorMessage = BootProperties.getResourceBundle().getString("boot.unsupported_java_version");
|
String errorMessage = BootProperties.getResourceBundle().getString("boot.unsupported_java_version");
|
||||||
|
@ -19,21 +19,30 @@ package org.jackhuang.hmcl;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
public final class MainTest {
|
public final class MainTest {
|
||||||
@Test
|
@Test
|
||||||
public void testCheckJavaVersion() {
|
public void testGetJavaFeatureVersion() {
|
||||||
assertFalse(Main.checkJavaVersion("1.6.0"));
|
assertEquals(6, Main.getJavaFeatureVersion("1.6.0"));
|
||||||
assertFalse(Main.checkJavaVersion("1.6.0_45"));
|
assertEquals(6, Main.getJavaFeatureVersion("1.6.0_45"));
|
||||||
assertFalse(Main.checkJavaVersion("1.7.0"));
|
assertEquals(7, Main.getJavaFeatureVersion("1.7.0"));
|
||||||
assertFalse(Main.checkJavaVersion("1.7.0_80"));
|
assertEquals(7, Main.getJavaFeatureVersion("1.7.0_80"));
|
||||||
assertFalse(Main.checkJavaVersion("1.8"));
|
assertEquals(8, Main.getJavaFeatureVersion("1.8"));
|
||||||
assertFalse(Main.checkJavaVersion("1.8.0_321"));
|
assertEquals(8, Main.getJavaFeatureVersion("1.8u321"));
|
||||||
|
assertEquals(8, Main.getJavaFeatureVersion("1.8.0_321"));
|
||||||
|
assertEquals(11, Main.getJavaFeatureVersion("11"));
|
||||||
|
assertEquals(11, Main.getJavaFeatureVersion("11.0.26"));
|
||||||
|
assertEquals(21, Main.getJavaFeatureVersion("21"));
|
||||||
|
assertEquals(26, Main.getJavaFeatureVersion("26-ea"));
|
||||||
|
|
||||||
assertTrue(Main.checkJavaVersion("11"));
|
assertEquals(-1, Main.getJavaFeatureVersion(null));
|
||||||
assertTrue(Main.checkJavaVersion("11.0.26"));
|
assertEquals(-1, Main.getJavaFeatureVersion(""));
|
||||||
assertTrue(Main.checkJavaVersion("21"));
|
assertEquals(-1, Main.getJavaFeatureVersion("0"));
|
||||||
|
assertEquals(-1, Main.getJavaFeatureVersion("0.8"));
|
||||||
|
assertEquals(-1, Main.getJavaFeatureVersion("abc"));
|
||||||
|
assertEquals(-1, Main.getJavaFeatureVersion("1.abc"));
|
||||||
|
assertEquals(-1, Main.getJavaFeatureVersion(".1"));
|
||||||
|
assertEquals(-1, Main.getJavaFeatureVersion("1111111111111111111111"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user