همونطوری که میدونید Gradle برای اینکه بتونه پروژه ما رو بیلد کنه، باید نیازمندی های پروژه (Dependency) رو از مخازنی که براش تعریف کردیم (Repository) دانلود بکنه.
برای مثال فرض کنید ما کتابخونه Gson رو نیاز داریم که توی ()mavenCentral موجوده.
پس توی فایل build.gradle همچین چیزهایی خواهیم داشت.
allprojects { repositories { mavenCentral() } } dependencies { implementation 'com.google.code.gson:gson:2.8.5' }
حالا وقتی که پروژه مون رو بیلد میکنیم، Gradle میره اینجا , و فایل gson-2.8.5.jar رو پیدا میکنه و دانلودش میکنه.
ولی خب ما تحریمیم و دسترسی نداریم به این فایل! پس بیلد متوقف میشه !!
برای حل مشکل هم که مشخصه باید تحریم ها رو دور بزنیم. که توی این مطلب در موردش به صورت کامل توضیح داده شده. روش هایی مثل
اما یه مشکلاتی این روش ها دارند.
خب راه حل چیه ؟
راه اندازی یک مخزن شخصی (Private Repository)
شرکت Sonatype یک Repository manager رایگان به نام Nexus داره که کارش راه اندازی مخزن شخصی روی سیستم خودمون هست.
کاری که ما قراره توسط Nexus انجام بدیم به این شکله که درخواست های دانلودی که Gradle داره، به جای اینکه مثلا به ()mavenCentral بره اول به مخزن شخصی ما میره و در صورتی که اون فایل رو داشته باشیم در اختیار Gradle قرار میگیره و در غیر این صورت توسط مخزن ما دانلود میشه و بعدش تحویل Gradle داده میشه و یک نسخه برای دفعات بعدی نگه داری میشه. تقریبا اتفاقی شبیه عکس پایین.
از این به بعد بقیه اعضای تیم نیازی به دانلود اون فایل از اینترنت ندارن و کافیه از طریق شبکه Local به مخزن شخصی ما وصل بشن.
خب شروع میکنیم
برای این کار نیاز داریم تا Nexus Repository Manager OSS رو دانلود و راه اندازی بکنیم. پس اگر ویندوزی هستیم به این صفحه میریم و ایمیل مون رو وارد میکنیم و فایل رو دانلود میکنیم.(نیاز به دور زدن تحریم داریم)
اگر مشکلی برای دانلود دارید من آخرین ورژن (3.17.0) رو که برای ویندوز 64 بیت دانلود کردم و اینجا گذاشتمش.
* برای Linux , Mac هم قابلیت راه اندازی وجود داره که اینجا در مورد مراحل ویندوز صحبت میکنیم.
حالا فایل فشرده دانلود شده رو Extract میکنیم و به مسیر زیر میریم.
extract place ==> nexus-3.17.0-01-win64 ==> nexus-3.17.0-01 ==> bin
اونجا cmd یا powerShell رو باز میکنیم و دستور run رو به این شکل اجرا میکنیم.
.\nexus.exe /run
حواستون باشه اواسط کار پیغامی میاد برای دادن دسترسی به اینترنت که شما باید allow access رو بزنید.
حالا منتظر میمونیم تا این پیغام رو روی صفحه ببینیم.
تبریک میگم. به همین سادگی repository manager تون راه اندازی شد.
حالا مرورگر وب تون رو باز کنید و به این آدرس برید.
http://localhost:8081/
بعد به منوی Browse برید. میبینید که اولین آیتم اون لیست maven-central هستش که با نوع Proxy به صورت پیش فرض تعریف شده و جلوش یک دکمه ی کپی وجود داره.
دکمه کپی رو بزنید تا دیالوگی که داخلش آدرسی شبیه آدرس زیر میاد رو ببینید.
http://localhost:8081/repository/maven-central/
این آدرس جایگزینی هست که Gradle باید به اون متصل بشه.
به صورت زیر به جای ()MavenCentral داخل Repository های پروژه مون تعریفش میکنیم.
در انتها فایل مون به این شکل میشه.
allprojects { repositories { // comment this line ==> mavenCentral() //add this line maven { url 'http://localhost:8081/repository/maven-central/' } } }
و تمام !
اینجا میتونید ویدیوی مراحل بالا رو ببینید
حالا از این به بعد Gradle هر Dependency ای رو که لازم باشه از mavenCentral بگیره از سرور واسط ما دریافت میکنه.
* فقط نکته ای که وجود داره حواستون باشه اگر دفعه اولی هست که اون Dependency رو از سرور واسط درخواست میکنید. باید روش های قبلی (پراکسی یا تغییر DNS) رو انجام داده باشید.
اما یه سوالی پیش میاد!
سوال : همه ی Dependency های یک پروژه که توی MaveCentral نیست! ممکنه توی Jcenter یا مثلا مخزن Google یا هر جای دیگه ای باشه! تکلیف اونا چی میشه ...؟
جواب : خودمون اونها رو اضافه می کنیم.
فرض کنید میخواهیم Jcenter رو هم به لیست مخرن های سرور واسط اضافه کنیم.
برای این کار، یه بار دیگه وارد مرورگر بشید و به آدرسhttp://localhost:8081/ برید، بالا سمت راست روی لاگین کلیک کنید اگر اولین باری هست که میخواهید لاگین کنید برای user name مقدار admin رو وارد کنید. و برای پسورد به این مسیر برید.
extract place ==> nexus-3.17.0-01-win64 ==> sonatype-work ==> nexus3
اینجا یه فایل به نام admin.password وجود داره که رمز admin داخلش وجود داره.اون رو کپی کنید و لاگین کنید. حواستون باشه رمز رو ذخیره کنید. چون بعد از لاگین این فایل پاک میشه.
حالا به قسمت settings برید و از منوی کناری Repositories رو انتخاب کنید. با زدن دکمه create repository یک لیست براتون باز میشه که حالت های مختلف ساختن مخازن هست.
برای این که Gradle پروتکل های Maven رو میشناسه پس نوع مخزن مون باید maven 2 باشه و این رفتاری که ما از مخزن میخاهیم (این که بهش وصل شیم و به عنوان یه آینه عمل بکنه) بهش Proxy گفته میشه.
پس از توی لیست (maven 2 (proxy رو انتخاب کنید. تا صفحه ی زیر باز بشه.
اینجا وارد جزئیات نمیشم، فقط دوتا فیلد اجباری رو وارد میکنیم.
برای مقدار Name مثلا مینویسیم proxy-jcenter-repo و برای remote storage آدرس زیر رو وارد میکنیم
https://jcenter.bintray.com/
شاید براتون سوال پیش بیاد آدرس ریپازیتوری jcenter رو از کجا آوردم؟! که البته چیز خاصی نیست با یه سرچ بهش میرسید.
ولی خب راه دیگه ای مثل خودندن داکیومنت ها وجود داره که توی ویدیوی زیر نشونش دادم.
maven {url 'http://localhost:8081/repository/proxy-jcenter-repo/'}
این کار رو برای همه ی مخزن های پروژه انجام میدیم و در آخر هم با بیلد کردن Gradle همه فایل ها داخل سرور لوکال ما قرار میگیرند و از این به بعد دسترسی به اینترنت نیاز نخواهد بود.
فقط یادتون باشه برای دفعات بعد نیاز نیست کار خاصی بکنید و فقط کافیه که Repository تون رو run/ بکنید و بدون هیچ مشکلی بابت Dependency های پروژه به برنامه نویسی خودتون برسید.
تنظیم پراکسی
اگر نیاز داشتین که برای سرور واسط تون Proxy ست کنید تنها کافیه توی تنظیمات دنبال منوی HTTP بگردید و مثل عکس زیر تنظیمش کنید.
خب فکر میکنم آموزش تا همینجا کفایت میکنه و شما هم متوجه اصل موضوع شده باشید.
امیدوارم این روش مشکلات تون رو بتونه کاهش بده.
اگر سوالی داشتید خوشحال میشم بتونم بهش پاسخ بدم.
ممنون از وقتی که گذاشتید.
موفق باشید.