search icon

تنظیم Mirror Gradle

Gradle یک ابزار مدرن برای ساخت (Build) و مدیریت وابستگی‌ها در پروژه‌های نرم‌افزاری است که بیشتر در پروژه‌های جاوا، اندروید و JVM-based استفاده می‌شود. این ابزار با بهره‌گیری از زبان‌های Groovy یا Kotlin برای تعریف تنظیمات، انعطاف‌پذیری بالایی نسبت به ابزارهای سنتی دارد و به دلیل سرعت بالا، پشتیبانی از کش، و اجرای افزایشی (Incremental Build) در پروژه‌های کوچک و بزرگ بسیار محبوب است. Gradle به‌طور گسترده در سیستم‌های CI/CD به‌کار می‌رود و ابزار پیش‌فرض ساخت پروژه‌های Android محسوب می‌شود.

  

ابتدا distributions Gradle را در پروژه تنظیم می کنیم.
 
در پروژه فایل زیر را ویرایش می کنیم.
android/gradle/wrapper/gradle-wrapper.properties

سپس جلوی distributionUrl ادرس میرور زیر را ست می کنیم دقت کنید نسخه خود را در اخر ادرس جایگزین کنید.

distributionUrl=https\://mirror-maven.runflare.com/distributions/gradle-8.14-all.zip/

 
آموزش تنظیم Mirror برای Gradle نسخه ۷ به بعد…
 

درصورتی که میرور Flutter را ست نکردید طبق آموزش تنظیم میرور برای فلاتر انجام بدهید.
 

برای تنظیم میرور gradle در مسیر پروژه داخل پوشه android فایل های build.gradle.kts و settings.gradle.kts را ویرایش کرده عبارت repositories را داخل آن پیدا کرده و به صورت زیر تغییر میدهیم


repositories {
        maven {
            url = uri("https://mirror-maven.runflare.com/android/maven2/")
        }
        maven {
            url = uri("https://mirror-maven.runflare.com/maven2/")
        }
        maven {
            url = uri("https://mirror-maven.runflare.com/gradle-plugins/")
        }
    }

بعد انجام این کار دستورات زیر را میزنیم
./gradlew --stop
./gradlew clean

نکته: اگر با تنظیم repositories بالا همچنان خطایی بابت دریافت از مخازن اصلی داشتید و لینک میرور جایگزین نشده بود باید در مسیر نصب sdk فلاتر در مسیر زیر رفته
flutter\packages\flutter_tools\gradle

سپس repositories را مثل آموزش بالا برای فایل های build.gradle.kts و settings.gradle.kts انجام بدهید توجه داشته باشید درصورتی که repositories داخل این فایل ها باشد جایگزین کنید.

  
آموزش تنظیم Mirror برای Gradle نسخه های قدیمی

برای تنظیم mirror برای gradle دو فایل کانفیگ init.gradle و init.gradle.kts را در مسیر ~/.gradle/ ویرایش کنید و مانند زیر آدرس جدید را تنظیم کنید:

 

فایل ~/.gradle/init.gradle


ext.urlMappings = [
    "https://repo.maven.apache.org/maven2": "https://mirror-maven.runflare.com/maven2/",
    "https://dl.google.com/dl/android/maven2": "https://mirror-maven.runflare.com/android/maven2/",
    "https://plugins.gradle.org/m2" : "https://mirror-maven.runflare.com/gradle-plugins/"
]

def mirrorRepos = {
    each { ArtifactRepository repo ->
        if (repo instanceof MavenArtifactRepository) {
            def originalUrl = repo.url.toString().replaceAll('/+$', '')
            def mirrorUrl = ext.urlMappings[originalUrl]

            if (mirrorUrl != null) {
                logger.lifecycle("Mirroring ${originalUrl} -> ${mirrorUrl}")
                repo.setUrl(mirrorUrl)
            }
        }
    }
}

gradle.allprojects { project ->
    project.buildscript.repositories {
        mirrorRepos.delegate = delegate
        mirrorRepos()
    }
    project.repositories {
        mirrorRepos.delegate = delegate
        mirrorRepos()
    }
}

gradle.settingsEvaluated { settings ->
    settings.pluginManagement.repositories {
        mirrorRepos.delegate = delegate
        mirrorRepos()
    }

    if (settings.hasProperty("dependencyResolutionManagement")) {
        settings.dependencyResolutionManagement.repositories {
            mirrorRepos.delegate = delegate
            mirrorRepos()
        }
    }
}

 

فایل ~/.gradle/init.gradle.kts


import org.gradle.api.artifacts.repositories.MavenArtifactRepository
import org.gradle.api.artifacts.dsl.RepositoryHandler

fun RepositoryHandler.enableMirror() {
    all {
        if (this is MavenArtifactRepository) {
            val originalUrl = this.url.toString().removeSuffix("/")
            urlMappings[originalUrl]?.let { mirrorUrl ->
                println("Repository[$originalUrl] is mirrored to $mirrorUrl")
                setUrl(mirrorUrl)
            }
        }
    }
}

val urlMappings = mapOf(
    "https://repo.maven.apache.org/maven2" to "https://mirror-maven.runflare.com/maven2/",
    "https://dl.google.com/dl/android/maven2" to "https://mirror-maven.runflare.com/android/maven2/",
    "https://plugins.gradle.org/m2" to "https://mirror-maven.runflare.com/gradle-plugins/"
)

gradle.allprojects {
    buildscript {
        repositories.enableMirror()
    }
    repositories.enableMirror()
}

gradle.settingsEvaluated {
    pluginManagement.repositories.enableMirror()
    dependencyResolutionManagement.repositories.enableMirror()
}

در همه ماژول‌های پروژه، تمامی بخش های repositories در همه فایل ها مانند: build.gradle، settings.gradle و … را حذف کنید و یا با آدرس مخزن (https://mirror-maven.runflare.com/maven2) جایگزین کنید.