کتابخانه خود را آپلود کنید

برای اجازه دسترسی به کتابخانه خود، باید یک مخزن انتخاب کنید. این صفحه شما را از طریق ملاحظات مربوط به انتخاب نوع مخزن راهنمایی می کند و نحوه ایجاد یک نشریه با استفاده از افزونه Maven Publish را نشان می دهد.

قبل از بارگذاری کتابخانه خود، مطمئن شوید که کتابخانه خود را برای انتشار آماده کرده اید و انواع انتشارات ضروری یا تجهیزات آزمایشی را پیکربندی کرده اید.

نوع مخزن را انتخاب کنید

کتابخانه ها به صورت فایل AAR منتشر می شوند. این فایل ها حاوی کدهای کامپایل شده به عنوان بایت کد و کتابخانه های بومی، مانیفست اندروید و منابع هستند. بسته به خودی خود هیچ هویت، نسخه یا وابستگی به کتابخانه های دیگر را اعلام نمی کند.

ارائه AAR ها از طریق یک مخزن به طور کلی بهترین روش است، به جای توزیع مستقیم AAR. این به کاربران کمک می کند تا درک بهتری از جایی که کتابخانه از کجا آمده است به جای اینکه مجبور باشند با یک فایل name.aar بدون جزئیات مهم مانند نسخه سر و کار داشته باشند. هنگام ارتقاء به نسخه جدیدتر یک کتابخانه، از یک مخزن استفاده کنید تا مطمئن شوید که فقط وابستگی های مورد نیاز نسخه جدیدتر اضافه شده است، به طوری که کاربران مجبور نباشند به صورت دستی وابستگی ها را به روز کنند.

استفاده از یک مخزن برای انتشار کتابخانه شما مزایای متعددی دارد:

  • Gradle می تواند به طور خودکار وابستگی های کتابخانه شما را به نمودار وابستگی اضافه کند.
  • Gradle می تواند اطمینان حاصل کند که یک نسخه واحد از کتابخانه شما در نمودار وابستگی قرار دارد و اگر کتابخانه شما به صورت گذرا بیش از یک بار با نسخه های مختلف گنجانده شود، تضادها را حل می کند.
  • اگر کتابخانه شما از ویژگی‌های زبان جاوا 8 یا بالاتر استفاده کند، پلاگین Gradle Android (AGP) می‌تواند شیرین‌سازی کارآمدتری را انجام دهد و زمان ساخت را برای کاربران شما کاهش دهد.
  • کتابخانه شما می‌تواند از انتشارات مختلف استفاده کند و دارای ویژگی‌هایی مانند تجهیزات آزمایشی باشد.

توزیع مستقیم AAR هیچ اطلاعاتی در مورد هویت، نسخه یا وابستگی های کتابخانه شما در اختیار کاربر شما قرار نمی دهد. هنگام انتشار در یک مخزن، توزیع توسط یک فایل جداگانه که بخشی از مکانیسم مخزن است مدیریت می شود. برای مخازن Maven، این فایل POM است. بنابراین، اکیداً توصیه می شود که کتابخانه ها را با استفاده از مخازن به جای توزیع دستی فایل های AAR منتشر کنید.

انواع مخازن

سه نوع مخزن وجود دارد:

  • مخازن آنلاین رایگان، مانند Maven Central، به هر کسی اجازه می دهند کتابخانه ها را آپلود و دانلود کنند.
  • مخازن خصوصی، با دسترسی از طریق ورود، امکان توزیع کنترل شده کتابخانه های خصوصی را فراهم می کنند.
  • مخازن محلی و مبتنی بر پوشه امکان توزیع کتابخانه ها را از طریق دانلود دستی فراهم می کنند.

استفاده از مخازن محلی و مبتنی بر پوشه بسیار شبیه به ارائه لینک دانلود دستی به AAR یا ارسال AAR از طریق ایمیل به کاربران خود است. تفاوت اصلی این است که شما فقط AAR را ارسال نمی کنید، بلکه اطلاعات اضافی درباره هویت، نسخه و وابستگی ها را نیز ارسال می کنید.

شما یک فایل فشرده از مخزن مبتنی بر پوشه حاوی AAR شما به اضافه ابرداده را توزیع می کنید. سپس کاربران شما می توانند محتویات فایل را استخراج کنند، محتویات را به پروژه خود اضافه کنند و Gradle را به آن نشان دهند. از آن به بعد، کاربران می توانند با استفاده از مختصات Maven وابستگی خود را به کتابخانه اعلام کنند، گویی که کتابخانه در یک مخزن آنلاین است و از تمام مزایای ذکر شده در قبل بهره مند شوند.

انتشارات را ایجاد کنید

با استفاده از پلاگین Gradle Maven Publish منتشر کنید. افزونه Maven Publish به شما امکان می دهد انتشارات و مخازن را اعلام کنید و وظایفی را برای انتشار این انتشارات در مخازن ایجاد کنید. این انتشارات یک نمونه SoftwareComponent را مصرف می‌کنند که افزونه‌ای که ساخت را ایجاد می‌کند، که می‌تواند AGP یا افزونه java-library باشد.

توجه داشته باشید که هنگام اجرای افزونه Maven Publish با AGP، هنگام اعمال افزونه، اجزای نرم افزار مستقیما ایجاد نمی شوند. آنها در عوض در مرحله afterEvaluate() callback ایجاد می شوند. بنابراین، نشریه ای که جزء نرم افزار را انتخاب می کند نیز باید در مرحله afterEvaluate() پیکربندی شود.

قطعه کد زیر از فایل build.gradle در سطح ماژول، انتشاراتی را برای یک نوع معین ایجاد می کند که با singleVariant() یا multipleVariants() ایجاد شده است:

شیار

publishing {
  publications {
    release(MavenPublication) {
      groupId = 'com.my-company'
      artifactId = 'my-library'
      version = '1.0'

      afterEvaluate {
        from components.release
      }
    }
  }
}

کاتلین

publishing {
  publications {
    register<MavenPublication>("release") {
      groupId = "com.my-company"
      artifactId = "my-library"
      version = "1.0"

      afterEvaluate {
        from(components["release"])
      }
    }
  }
}

در مثال قبل، نام کامپوننت ( components.release ) بر اساس نامی است که به singleVariant() یا multipleVariants() داده شده است.

هنگامی که یک انتشارات را اعلام کردید، باید یک مخزن هدف ایجاد کنید.

در یک مخزن محلی منتشر کنید

انتشار در یک مخزن محلی بسیار شبیه به انتشار در یک مخزن راه دور است، به جز اعلامیه مخزن. بخش قبل را بخوانید تا یاد بگیرید چگونه در یک مخزن راه دور منتشر کنید تا انتشاراتی ایجاد کنید که نوع یا انواع مورد نظر را منتشر کند. سپس یک مخزن محلی ایجاد کنید:

شیار

publishing {
  publications {
    release(MavenPublication) {
      ...
    }
  }
  repositories {
    maven {
      name = 'myrepo'
      url = layout.buildDirectory.dir("repo")
    }
  }
}

کاتلین

publishing {
  publications {
    register<MavenPublication>("release") {
      ...
    }
  }
  repositories {
    maven {
      name = "myrepo"
      url = uri(layout.buildDirectory.dir("repo"))
    }
  }
}

با این کار وظیفه ای به نام publish Release To MyRepo Repository ایجاد می شود که از نام انتشارات و نام مخزن تشکیل شده است. این وظیفه را اجرا کنید تا مخزن در محل ارائه شده ایجاد شود. در این مثال، مخزن در داخل پوشه ساخت پروژه، تحت یک فهرست repo تولید می شود.

اگر می خواهید به طور خودکار یک فایل فشرده از مخزن تولید کنید، این کار را با استفاده از کد زیر انجام دهید:

شیار

tasks.register('generateRepo', Zip) {
  def publishTask = tasks.named('publishReleasePublicationToMyrepoRepository')
  from publishTask.map { it.getRepository().getUrl() }
  into 'mylibrary'
  archiveFileName.set('mylibrary.zip')
}

کاتلین

tasks.register<Zip>("generateRepo") {
  val publishTask = tasks.named(
    "publishReleasePublicationToMyrepoRepository",
    PublishToMavenRepository::class.java)
  from(publishTask.map { it.repository.url })
  into("mylibrary")
  archiveFileName.set("mylibrary.zip")
}

این کد یک وظیفه Zip به نام generateRepo ایجاد می‌کند که محتوای کار انتشار را مصرف می‌کند و آن را فشرده می‌کند و در عین حال اطمینان می‌دهد که ورودی‌های فشرده در یک پوشه سطح بالا به نام mylibrary هستند. خروجی در زیر build/distributions قرار دارد.