Flutter & Android Mirror

سرویس Mirror برای Flutter artifacts و Maven/Gradle packages.
فایل‌ها از منابع اصلی دریافت و برای دفعات بعدی کش می‌شوند.
https://flutter.tarazerp.ir https://maven.tarazerp.ir

پکیج‌های Flutter (pub)

برای استفاده از پکیج‌های Flutter، آدرس mirror ما جایگزین pub.dev می‌شود. کافیست متغیر PUB_HOSTED_URL را تنظیم کنید تا تمام دستورات flutter pub get و dart pub add به‌صورت خودکار از این سرور دریافت شوند.

بررسی وجود پکیج یا نسخه خاص:
می‌توانید مستقیماً در سایت pub.tarazerp.ir جستجو کنید و لیست پکیج‌های موجود و نسخه‌های کش‌شده را ببینید.
پکیج یا نسخه‌ای در سایت نیست؟
نگران نباشید — اگر پکیجی هنوز روی سرور نباشد یا نسخه درخواستی کش نشده باشد، به‌محض اینکه اولین درخواست برسد، سرور آن را مستقیماً از pub.dev دانلود کرده و برای دفعات بعدی نگه می‌دارد. از دید پروژه شما هیچ تفاوتی احساس نمی‌شود.

۱. متغیرهای محیطی Flutter Flutter

Flutter برای دانلود SDK، engine و artifactها از FLUTTER_STORAGE_BASE_URL استفاده می‌کند. متغیر PUB_HOSTED_URL هم آدرس mirror پکیج‌های pub را مشخص می‌کند.

روش A — موقت (فقط برای همان session ترمینال)
بدون تنظیم دائمی، مستقیماً قبل از دستور flutter در ترمینال وارد کنید:
در PowerShell، قبل از هر دستور flutter:
$env:FLUTTER_STORAGE_BASE_URL="https://flutter.tarazerp.ir"
$env:PUB_HOSTED_URL="https://pub.tarazerp.ir"
flutter pub get
یا در یک خط:
$env:FLUTTER_STORAGE_BASE_URL="https://flutter.tarazerp.ir"; $env:PUB_HOSTED_URL="https://pub.tarazerp.ir"; flutter build apk
روش B — دائمی / سراسری (توصیه‌شده)
متغیرها را یک‌بار ثبت کنید تا برای همه پروژه‌ها و ترمینال‌ها فعال باشند.
روش ۱ — PowerShell (سراسری برای کاربر جاری — بدون نیاز به Admin):
[Environment]::SetEnvironmentVariable("FLUTTER_STORAGE_BASE_URL", "https://flutter.tarazerp.ir", "User")
[Environment]::SetEnvironmentVariable("PUB_HOSTED_URL", "https://pub.tarazerp.ir", "User")
⚠ بعد از اجرا، PowerShell را ببندید و دوباره باز کنید تا تغییرات اعمال شود.
روش ۲ — PowerShell (سراسری برای همه کاربران — نیاز به Run as Administrator):
[Environment]::SetEnvironmentVariable("FLUTTER_STORAGE_BASE_URL", "https://flutter.tarazerp.ir", "Machine")
[Environment]::SetEnvironmentVariable("PUB_HOSTED_URL", "https://pub.tarazerp.ir", "Machine")
روش ۳ — از طریق GUI (بدون نیاز به ترمینال):
1. Win + R → sysdm.cpl → Enter
2. Advanced → Environment Variables
3. Under "User variables" → New
4. Name: FLUTTER_STORAGE_BASE_URL — Value: https://flutter.tarazerp.ir
5. Name: PUB_HOSTED_URL — Value: https://pub.tarazerp.ir

۲. Gradle Init Script (روش پیشرفته) Maven

اگه نمی‌خوای هر پروژه رو جداگانه تنظیم کنی، این فایل رو یک‌بار بساز تا همه پروژه‌های Gradle روی سیستمت — از جمله included buildهای داخل Flutter SDK — به صورت خودکار به Mirror هدایت بشن.

فایل را در مسیر زیر بسازید (پوشه init.d را اگر وجود ندارد بسازید):
%USERPROFILE%\.gradle\init.d\mirror.init.gradle.kts  —  معمولاً C:\Users\YourUser\.gradle\init.d\
نام فایل: mirror.init.gradle.kts
// ========================================================
//  Flutter Mirror – Gradle Init Script (Kotlin DSL)
//  این فایل همه درخواست‌های Gradle رو به سمت mirror هدایت می‌کنه
//  حتی برای included buildهای داخلی Flutter SDK
// ========================================================

val MIRROR = "https://maven.tarazerp.ir"

val REDIRECT_HOSTS = setOf(
    "repo.maven.apache.org",
    "repo1.maven.org",
    "dl.google.com",
    "maven.google.com",
    "plugins.gradle.org",
    "jitpack.io",
    "jcenter.bintray.com",
    "maven.fabric.io",
    "developer.huawei.com",
    "storage.googleapis.com",
)

fun shouldRedirect(url: String) = REDIRECT_HOSTS.any { url.contains(it) }

fun interceptRepos(repos: RepositoryHandler) {
    repos.whenObjectAdded {
        if (this is MavenArtifactRepository) {
            val original = this.url.toString()
            if (shouldRedirect(original)) {
                logger.info("[Mirror] Redirecting: $original → $MIRROR")
                this.setUrl(MIRROR)
            }
        }
    }
}

gradle.beforeSettings {
    pluginManagement {
        interceptRepos(repositories)
        repositories {
            maven(url = MIRROR)
        }
    }
    @Suppress("UnstableApiUsage")
    dependencyResolutionManagement {
        interceptRepos(repositories)
        repositories {
            maven(url = MIRROR) { name = "flutter-mirror" }
        }
    }
}

gradle.allprojects {
    buildscript {
        interceptRepos(repositories)
        repositories {
            clear()
            maven(url = MIRROR)
        }
    }
    interceptRepos(repositories)
}

۳. تنظیمات Gradle/Maven (داخل پروژه) FlutterMaven

فقط یک آدرس برای همه repoها کافی است. نیازی به تعریف جداگانه Google/Central/Plugin Portal نیست.

Kotlin DSL  settings.gradle.kts

pluginManagement {
  repositories {
    maven(url = "https://maven.tarazerp.ir")
  }
}

Groovy DSL  settings.gradle

pluginManagement {
  repositories {
    maven { url "https://maven.tarazerp.ir" }
  }
}

Gradle Wrapper  gradle-wrapper.properties

distributionUrl=https://flutter.tarazerp.ir/gradle/distributions/gradle-8.7-bin.zip

Flutter Mirror flutter.tarazerp.ir

آرتیفکت‌های Flutter از Google Cloud Storage دریافت می‌شوند.

  • /flutter_infra_release/...
  • /download.flutter.io/...
  • /artifacts/...
  • /dart-sdk/...
  • /flutter_web_sdk/...
  • /pkg/...
upstream: storage.googleapis.com

Maven Mirror maven.tarazerp.ir

یک endpoint برای همه Maven repositories.

  • /maven/...
  • /maven/google/...
  • /maven/central/...
  • /maven/gradle-plugins/...
  • /gradle/distributions/...

مخازن Maven پشتیبانی‌شده

  • dl.google.com/dl/android/maven2
  • repo.maven.apache.org/maven2
  • repo1.maven.org/maven2
  • plugins.gradle.org/m2
  • jitpack.io
  • jcenter.bintray.com
  • maven.fabric.io/public
  • developer.huawei.com/repo
TarazERP • Mirror Service