From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Sat, 3 Feb 2024 18:45:53 -0500 Subject: [PATCH] Configurable LibraryLoader maven repos Add JVM flag `-DLeaf.library-download-repo=link` to choose library download repo link. e.g. `-DLeaf.library-download-repo=https://maven.aliyun.com/repository/public` diff --git a/src/main/java/io/papermc/paper/plugin/loader/library/impl/MavenLibraryResolver.java b/src/main/java/io/papermc/paper/plugin/loader/library/impl/MavenLibraryResolver.java index 0c0c14936bf5a45ac7e2bf486cdb82da31b33b46..68400696343ab0846d3a4c9bb29c98e1f0d83584 100644 --- a/src/main/java/io/papermc/paper/plugin/loader/library/impl/MavenLibraryResolver.java +++ b/src/main/java/io/papermc/paper/plugin/loader/library/impl/MavenLibraryResolver.java @@ -59,12 +59,25 @@ public class MavenLibraryResolver implements ClassPathLibrary { *

This repository is also used by the legacy {@link org.bukkit.plugin.java.LibraryLoader}.

*/ public static final String MAVEN_CENTRAL_DEFAULT_MIRROR = getDefaultMavenCentralMirror(); - private static final List MAVEN_CENTRAL_URLS = List.of( + // Leaf start - Configurable LibraryLoader maven repos + @org.jspecify.annotations.Nullable + public static final RemoteRepository CUSTOM_MAVEN_CENTRAL_MIRROR_REPO = getCustomCentralMirrorRepo(); + private static final String[] MAVEN_CENTRAL_URLS = new String[]{ "https://repo1.maven.org/maven2", "http://repo1.maven.org/maven2", "https://repo.maven.apache.org/maven2", "http://repo.maven.apache.org/maven2" - ); + }; + // From https://storage-download.googleapis.com/maven-central/index.html + private static final String[] MAVEN_CENTRAL_GOOGLE_MIRROR_URLS = new String[]{ + "https://maven-central.storage-download.googleapis.com/maven2", + "http://maven-central.storage-download.googleapis.com/maven2", + "https://maven-central-eu.storage-download.googleapis.com/maven2", + "http://maven-central-eu.storage-download.googleapis.com/maven2", + "https://maven-central-asia.storage-download.googleapis.com/maven2", + "http://maven-central-asia.storage-download.googleapis.com/maven2" + }; + // Leaf end - Configurable LibraryLoader maven repos private static final Logger LOGGER = LoggerFactory.getLogger("MavenLibraryResolver"); private final RepositorySystem repository; @@ -120,12 +133,33 @@ public class MavenLibraryResolver implements ClassPathLibrary { * dependencies from */ public void addRepository(final RemoteRepository remoteRepository) { - if (MAVEN_CENTRAL_URLS.stream().anyMatch(remoteRepository.getUrl()::startsWith)) { + // Leaf start - Configurable LibraryLoader maven repos + for (String url : MAVEN_CENTRAL_URLS) { + if (remoteRepository.getUrl().startsWith(url)) { + RemoteRepository mirrorRepo = CUSTOM_MAVEN_CENTRAL_MIRROR_REPO; + if (mirrorRepo != null) { + this.repositories.add(mirrorRepo); + return; + } + // Leaf end - Configurable LibraryLoader maven repos LOGGER.warn( "Use of Maven Central as a CDN is against the Maven Central Terms of Service. Use MavenLibraryResolver.MAVEN_CENTRAL_DEFAULT_MIRROR instead. DO NOT report this to Paper or Leaf! Please contact plugin's support to adapt this change.", // Leaf - Better warning message for discouraging Maven Central as CDN new RuntimeException("Plugin used Maven Central for library resolution") ); + // Leaf start - Configurable LibraryLoader maven repos + } + } + // Match google api maven central mirror urls + for (String url : MAVEN_CENTRAL_GOOGLE_MIRROR_URLS) { + if (remoteRepository.getUrl().startsWith(url)) { + RemoteRepository mirrorRepo = CUSTOM_MAVEN_CENTRAL_MIRROR_REPO; + if (mirrorRepo != null) { + this.repositories.add(mirrorRepo); + return; + } + } } + // Leaf end - Configurable LibraryLoader maven repos this.repositories.add(remoteRepository); } @@ -162,4 +196,15 @@ public class MavenLibraryResolver implements ClassPathLibrary { } return central; } + + // Leaf start - Configurable LibraryLoader maven repos + @org.jspecify.annotations.Nullable + private static RemoteRepository getCustomCentralMirrorRepo() { + String mirrorAddr = System.getProperty("Leaf.library-download-repo"); + if (mirrorAddr != null) { + return new RemoteRepository.Builder("central", "default", mirrorAddr).build(); + } + return null; + } + // Leaf end - Configurable LibraryLoader maven repos } diff --git a/src/main/java/org/bukkit/plugin/java/LibraryLoader.java b/src/main/java/org/bukkit/plugin/java/LibraryLoader.java index 70d57e6abbd876d7f3087905d5277777162d317c..15992c275ae143af5b140a787f921658de58e05a 100644 --- a/src/main/java/org/bukkit/plugin/java/LibraryLoader.java +++ b/src/main/java/org/bukkit/plugin/java/LibraryLoader.java @@ -47,6 +47,7 @@ public class LibraryLoader { public static java.util.function.Function, List> REMAPPER; // Paper - remap libraries private static List getRepositories() { + if (io.papermc.paper.plugin.loader.library.impl.MavenLibraryResolver.CUSTOM_MAVEN_CENTRAL_MIRROR_REPO != null) return List.of(io.papermc.paper.plugin.loader.library.impl.MavenLibraryResolver.CUSTOM_MAVEN_CENTRAL_MIRROR_REPO ); // Leaf - Configurable LibraryLoader maven repos return List.of(new RemoteRepository.Builder("central", "default", MavenLibraryResolver.MAVEN_CENTRAL_DEFAULT_MIRROR).build()); }