আপনার লাইব্রেরি আপলোড করুন

আপনার লাইব্রেরিতে অ্যাক্সেস দেওয়ার জন্য, আপনাকে একটি সংগ্রহস্থল বেছে নিতে হবে। এই পৃষ্ঠাটি আপনাকে একটি সংগ্রহস্থলের ধরন বেছে নেওয়ার সাথে সম্পর্কিত বিবেচনার মাধ্যমে গাইড করে এবং দেখায় কিভাবে Maven Publish Plugin ব্যবহার করে একটি প্রকাশনা তৈরি করতে হয়।

আপনার লাইব্রেরি আপলোড করার আগে, নিশ্চিত করুন যে আপনি আপনার লাইব্রেরিটি রিলিজের জন্য প্রস্তুত করেছেন এবং যেকোন প্রয়োজনীয় প্রকাশনার ভেরিয়েন্ট বা টেস্ট ফিক্সচার কনফিগার করেছেন।

একটি সংগ্রহস্থল টাইপ চয়ন করুন

লাইব্রেরিগুলি AAR ফাইল হিসাবে প্রকাশিত হয়। এই ফাইলগুলিতে বাইটকোড এবং নেটিভ লাইব্রেরি, একটি Android ম্যানিফেস্ট এবং সংস্থান হিসাবে সংকলিত কোড রয়েছে। প্যাকেজ নিজেই কোনো পরিচয়, সংস্করণ, বা অন্যান্য লাইব্রেরির উপর নির্ভরতা ঘোষণা করে না।

একটি সংগ্রহস্থলের মাধ্যমে AAR প্রদান করা সাধারণত AAR সরাসরি বিতরণ না করে সর্বোত্তম অনুশীলন। এটি ব্যবহারকারীদের একটি ভালভাবে বুঝতে সাহায্য করে যে লাইব্রেরিটি কোথা থেকে আসছে, একটি name.aar ফাইলের সাথে গুরুত্বপূর্ণ বিশদ বিবরণ ছাড়াই, যেমন সংস্করণের সাথে ডিল করার পরিবর্তে। একটি লাইব্রেরির একটি নতুন সংস্করণে আপগ্রেড করার সময়, নতুন সংস্করণের শুধুমাত্র প্রয়োজনীয় নির্ভরতা যোগ করা হয়েছে তা নিশ্চিত করতে একটি সংগ্রহস্থল ব্যবহার করুন, যাতে ব্যবহারকারীদের ম্যানুয়ালি নির্ভরতা আপডেট করতে না হয়।

আপনার লাইব্রেরি প্রকাশ করার জন্য একটি সংগ্রহস্থল ব্যবহার করার একাধিক সুবিধা রয়েছে:

  • Gradle স্বয়ংক্রিয়ভাবে নির্ভরতা গ্রাফে আপনার লাইব্রেরির নির্ভরতা যোগ করতে পারে।
  • Gradle নিশ্চিত করতে পারে যে আপনার লাইব্রেরির একটি একক সংস্করণ নির্ভরতা গ্রাফে রয়েছে, যদি আপনার লাইব্রেরিটি বিভিন্ন সংস্করণের সাথে একাধিকবার ট্রানজিটিভভাবে অন্তর্ভুক্ত করা হয় তবে বিরোধগুলি সমাধান করে।
  • অ্যান্ড্রয়েড গ্রেডল প্লাগইন (এজিপি) আরও দক্ষ ডিসুগারিং করতে পারে যদি আপনার লাইব্রেরি জাভা 8 বা উচ্চতর ভাষা বৈশিষ্ট্য ব্যবহার করে, আপনার ব্যবহারকারীদের জন্য বিল্ড টাইম কমিয়ে দেয়।
  • আপনার লাইব্রেরি বৈকল্পিক প্রকাশনা ব্যবহার করতে পারে এবং পরীক্ষার ফিক্সচারের মতো বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করতে পারে।

AAR সরাসরি বিতরণ করা আপনার ব্যবহারকারীকে আপনার লাইব্রেরির পরিচয়, সংস্করণ বা নির্ভরতা সম্পর্কিত কোনো তথ্য প্রদান করে না। একটি সংগ্রহস্থলে প্রকাশ করার সময়, বিতরণ একটি পৃথক ফাইল দ্বারা পরিচালিত হয় যা সংগ্রহস্থল প্রক্রিয়ার অংশ। Maven সংগ্রহস্থলের জন্য, এটি হল POM ফাইল । তাই, ম্যানুয়ালি AAR ফাইল বিতরণ না করে সংগ্রহস্থল ব্যবহার করে লাইব্রেরি প্রকাশ করার জন্য দৃঢ়ভাবে সুপারিশ করা হয়।

ভান্ডারের ধরন

তিন ধরনের রিপোজিটরি আছে:

  • বিনামূল্যে অনলাইন সংগ্রহস্থল, যেমন মাভেন সেন্ট্রাল, যে কাউকে লাইব্রেরি আপলোড এবং ডাউনলোড করতে দিন।
  • ব্যক্তিগত সংগ্রহস্থল, লগইনের মাধ্যমে অ্যাক্সেস সহ, ব্যক্তিগত লাইব্রেরিগুলির নিয়ন্ত্রিত বিতরণের অনুমতি দেয়।
  • স্থানীয়, ফোল্ডার-ভিত্তিক সংগ্রহস্থলগুলি ম্যানুয়াল ডাউনলোডের মাধ্যমে লাইব্রেরি বিতরণের অনুমতি দেয়।

স্থানীয়, ফোল্ডার-ভিত্তিক সংগ্রহস্থলগুলি ব্যবহার করা আপনার ব্যবহারকারীদের AAR-তে একটি ম্যানুয়াল ডাউনলোড লিঙ্ক প্রদান বা ইমেলের মাধ্যমে AAR পাঠানোর মতোই। প্রধান পার্থক্য হল আপনি শুধু AAR পাঠাচ্ছেন না কিন্তু পরিচয়, সংস্করণ এবং নির্ভরতা সম্পর্কে অতিরিক্ত তথ্যও পাঠাচ্ছেন।

আপনি ফোল্ডার-ভিত্তিক সংগ্রহস্থলের একটি জিপ ফাইল বিতরণ করেন যাতে আপনার AAR প্লাস মেটাডেটা থাকে। আপনার ব্যবহারকারীরা তারপর ফাইলের বিষয়বস্তু বের করতে পারে, তাদের প্রজেক্টে বিষয়বস্তু যোগ করতে পারে এবং গ্রেডলকে এটিতে নির্দেশ করতে পারে। তারপর থেকে, ব্যবহারকারীরা ম্যাভেন স্থানাঙ্ক ব্যবহার করে লাইব্রেরির উপর নির্ভরতা ঘোষণা করতে পারে, যেন লাইব্রেরিটি একটি অনলাইন সংগ্রহস্থলে ছিল এবং পূর্বে উল্লিখিত সমস্ত সুবিধাগুলি থেকে উপকৃত হতে পারে।

প্রকাশনা তৈরি করুন

Gradle Maven Publish Plugin ব্যবহার করে প্রকাশ করুন। ম্যাভেন পাবলিশ প্লাগইন আপনাকে প্রকাশনা এবং সংগ্রহস্থল ঘোষণা করতে দেয় এবং এই প্রকাশনাগুলিকে সংগ্রহস্থলগুলিতে প্রকাশ করার জন্য কাজ তৈরি করে। এই প্রকাশনাগুলি একটি SoftwareComponent দৃষ্টান্ত ব্যবহার করে যে প্লাগইনটি যেটি বিল্ডটি তৈরি করে, যা এজিপি বা java-library প্লাগইন হতে পারে।

মনে রাখবেন AGP এর সাথে Maven Publish Plugin চালানোর সময়, প্লাগইন প্রয়োগ করার সময় সফ্টওয়্যার উপাদানগুলি সরাসরি তৈরি হয় না। তারা পরিবর্তে afterEvaluate() কলব্যাক পদক্ষেপের সময় তৈরি করা হয়। অতএব, সফ্টওয়্যার উপাদান নির্বাচন করে এমন প্রকাশনাকে অবশ্যই 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")
}

এই কোডটি generateRepo নামক একটি Zip টাস্ক তৈরি করে যা প্রকাশনা টাস্কের বিষয়বস্তু গ্রহণ করে এবং জিপ এন্ট্রিগুলি mylibrary নামক একটি শীর্ষ-স্তরের ফোল্ডারে রয়েছে তা নিশ্চিত করার সময় এটিকে সংকুচিত করে। আউটপুট build/distributions অধীনে অবস্থিত।