net.minecraftforge.gradle.common.util.EnvironmentChecks Maven / Gradle / Ivy
Go to download
Minecraft mod development framework used by Forge and FML for the gradle build system adapted for mohist api.
The newest version!
/*
* ForgeGradle
* Copyright (C) 2018 Forge Development LLC
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*/
package net.minecraftforge.gradle.common.util;
import org.gradle.api.Project;
import org.gradle.util.GradleVersion;
import org.slf4j.Logger;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
import java.io.IOException;
import java.net.URL;
import javax.annotation.Nullable;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLException;
/**
* Various environment checks.
*
* @see #checkEnvironment(Project)
*/
public class EnvironmentChecks {
public static final String ENABLE_CERTIFICATE_CHECK_VARIABLE = "net.minecraftforge.gradle.check.certs";
public static final String ENABLE_GRADLE_CHECK_VARIABLE = "net.minecraftforge.gradle.check.gradle";
public static final String ENABLE_JAVA_CHECK_VARIABLE = "net.minecraftforge.gradle.check.java";
private static final boolean ENABLE_CERTIFICATE_CHECK = Boolean.parseBoolean(System.getProperty(ENABLE_CERTIFICATE_CHECK_VARIABLE, "true"));
private static final boolean ENABLE_GRADLE_CHECK = Boolean.parseBoolean(System.getProperty(ENABLE_GRADLE_CHECK_VARIABLE, "true"));
private static final boolean ENABLE_JAVA_CHECK = Boolean.parseBoolean(System.getProperty(ENABLE_JAVA_CHECK_VARIABLE, "true"));
private static final Marker ENV_CHECK = MarkerFactory.getMarker("forgegradle.env_check");
public static void checkJavaRange(@Nullable JavaVersionParser.JavaVersion minVersionInclusive, @Nullable JavaVersionParser.JavaVersion maxVersionExclusive) {
checkRange("java", JavaVersionParser.getCurrentJavaVersion(), minVersionInclusive, maxVersionExclusive, "", "");
}
public static void checkGradleRange(@Nullable GradleVersion minVersionInclusive, @Nullable GradleVersion maxVersionExclusive) {
checkRange("Gradle", GradleVersion.current(), minVersionInclusive, maxVersionExclusive,
"\nNote: Upgrade your gradle version first before trying to switch to FG5.", "");
}
private static void checkRange(String name, Comparable current, @Nullable T minVersionInclusive, @Nullable T maxVersionExclusive, String additionalMin, String additionalMax) {
if (minVersionInclusive != null && current.compareTo(minVersionInclusive) < 0) {
throw new EnvironmentCheckFailedException(String.format("Found %s version %s. Minimum required is %s.%s", name, current, minVersionInclusive, additionalMin));
}
if (maxVersionExclusive != null && current.compareTo(maxVersionExclusive) >= 0) {
throw new EnvironmentCheckFailedException(String.format("Found %s version %s. Versions %s and newer are not supported yet.%s", name, current, maxVersionExclusive, additionalMax));
}
}
/**
* Checks the current project environment, and throws an exception if not satisfied.
*
* Current environment checks:
*
* - Java version is 1.8.0_101 or above (first JDK version to include Let's Encrypt certificates)
* - Gradle version is 7.1 or above (minimum version required by ForgeGradle)
* - Certificates for {@link Utils#FORGE_MAVEN} and {@link Utils#MOJANG_MAVEN} are valid (required repositories)
*
*
* @see #checkGradleRange(GradleVersion, GradleVersion)
* @see #checkJavaRange(JavaVersionParser.JavaVersion, JavaVersionParser.JavaVersion)
* @see #testServerConnection(String)
*/
public static void checkEnvironment(Project project) {
Logger logger = project.getLogger();
if (ENABLE_JAVA_CHECK) {
logger.debug(ENV_CHECK, "Checking Java version");
checkJavaRange(
// Minimum must be update 101 as it's the first one to include Let's Encrypt certificates.
JavaVersionParser.parseJavaVersion("1.8.0_101"),
null
);
} else {
logger.debug(ENV_CHECK, "Java version check disabled by system property");
}
if (ENABLE_GRADLE_CHECK) {
logger.debug(ENV_CHECK, "Checking Gradle version");
checkGradleRange(
GradleVersion.version("7.1"),
null
);
} else {
logger.debug(ENV_CHECK, "Gradle version check disabled by system property");
}
if (ENABLE_CERTIFICATE_CHECK) {
logger.debug(ENV_CHECK, "Checking server connections");
testServerConnection(Utils.FORGE_MAVEN);
testServerConnection(Utils.MOJANG_MAVEN);
} else {
logger.debug(ENV_CHECK, "Server connection check disabled by system property");
}
}
private static void testServerConnection(String url) {
try {
HttpsURLConnection conn = (HttpsURLConnection)new URL(url).openConnection();
conn.setRequestMethod("HEAD");
conn.connect();
conn.getResponseCode();
} catch (SSLException e) {
throw new EnvironmentCheckFailedException(String.format("Failed to validate certificate for host '%s'. "
+ "To disable this check, re-run with '-D%s=false'.", url, ENABLE_CERTIFICATE_CHECK_VARIABLE), e);
} catch (IOException e) {
// Normal connection failed, not the point of this test so ignore
}
}
/**
* Exception thrown when an environment check fails.
*/
static class EnvironmentCheckFailedException extends RuntimeException {
EnvironmentCheckFailedException(String message) {
super(message);
}
EnvironmentCheckFailedException(String message, Throwable cause) {
super(message, cause);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy