JavaRush /وبلاگ جاوا /Random-FA /معرفی سریع Gradle
Viacheslav
مرحله

معرفی سریع Gradle

در گروه منتشر شد

معرفی

موضوع این بررسی سیستم ساخت خودکار Gradle خواهد بود. در زبان انگلیسی به سیستم‌های ساخت ابزار ساخت می‌گویند . معرفی سریع Gradle - 1چرا این حتی ضروری است؟ ساخت دستی پروژه ها در جاوا یک فرآیند نسبتاً کار فشرده است. لازم است به درستی کتابخانه ها و چارچوب هایی که پروژه به آنها نیاز دارد و پروژه به آنها بستگی دارد، مشخص شود. در اینجا می توانید یک مقاله عالی در مورد Habré بخوانید: " کار با جاوا در خط فرمان ." دیر یا زود شما شروع به ایجاد چند اسکریپت برای خودکارسازی این فرآیند خواهید کرد. حالا تصور کنید که همه توسعه دهندگان در سراسر جهان این کار را انجام دهند و هرکس دوباره آنچه را که قبلاً شخصی برای پروژه خود نوشته است بنویسد. و سپس سیستم های مونتاژ پروژه ظاهر شدند که این فرآیند را خودکار می کنند. علاوه بر این، از یک طرف به شما این امکان را می دهند که یک پروژه را آنطور که می خواهید مونتاژ کنید، از طرف دیگر ابزارهای کم و بیش استاندارد شده را در اختیار شما قرار می دهند. جایگزینی برای Gradle، سیستم ساخت خودکار Maven است. این دو سیستم مونتاژ از یک طرف متفاوت هستند، اما از طرف دیگر شباهت های زیادی دارند. مطالبی در مورد این موضوع در وب سایت Gradle وجود دارد: " مهاجرت از Maven به Gradle ". همانطور که در این آموزش گفته شد، Gradle و Maven دیدگاه متفاوتی در مورد نحوه ساخت یک پروژه دارند. Gradle بر اساس نموداری از وظایف است که می تواند به یکدیگر بستگی داشته باشد. وظایف نوعی کار را انجام می دهند. Maven از مدلی از مراحل خاص استفاده می کند که "اهداف" خاصی به آن متصل است. این اهداف جایی است که برخی کارها انجام می شود. با این حال، با این رویکردهای مختلف، هر دو سیستم ساخت از یک قرارداد پیروی می کنند و مدیریت وابستگی مشابه است. برای شروع استفاده از Gradle باید آن را دانلود کنید. در Google یا Yandex "Gradle Build Tool" را وارد می کنیم و در اولین نتایج وب سایت رسمی را مشاهده می کنیم: https://gradle.org . در صفحه اصلی Gradle پیوندی با متن "Docs" وجود دارد که به اسناد Gradle منتهی می شود . ابتدا باید Gradle (نصب) را نصب کنیم، بنابراین ما به بخش " نصب Gradle " از مستندات علاقه مندیم. روش‌های نصب زیادی وجود دارد، از جمله روش قدیمی، یعنی. به صورت دستی (" نصب دستی "). طبق دستورالعمل ها، فایلی از نوع “ binary-only ” را دانلود کنید که نامی مانند gradle-5.1.1-bin.zip دارد. سپس آرشیو را باز کرده و متغیر محیطی PATH را طبق دستورالعمل پیکربندی کنید. نکته اصلی این است که پس از اجرای دستورالعمل ها، دستور gradle -vنسخه Gradle نصب شده را نشان می دهد. ممکن است مشکلی وجود داشته باشد که هنگام تعیین مکان، سیستم Gradle را در جایی که شما می خواهید پیدا نمی کند. بنابراین، در ویندوز می توانید انجام دهید (در *nix آنالوگ وجود دارد): for %i in (gradle.bat) do @echo. %~$PATH:i اکنون، شاید بتوانیم شروع به آشنایی کنیم.
معرفی سریع Gradle - 2

راه اندازی یک پروژه Gradle

من می خواهم بلافاصله یادآوری کنم که Gradle در مورد انجام وظایفی به نام وظایف است (من آنها را وظایف می نامم). وظایف توسط پلاگین های مختلف ارائه می شود . من به شما توصیه می کنم در اسناد رسمی درباره افزونه ها بیشتر بخوانید: " استفاده از پلاگین های Gradle ". مجموعه‌ای از «پلاگین‌های اصلی» وجود دارد که هنگام نصب Gradle همیشه در دسترس هستند. دسته بندی های مختلفی از این پلاگین ها وجود دارد، اما ما به دسته " Utility " علاقه مندیم . این مجموعه شامل پلاگین " Build Init Plugin " است که وظایفی را برای مقداردهی اولیه یک پروژه Gradle ارائه می دهد. ما علاقه مند به ایجاد یک نوع پروژه هستیم: " java-application ". بیایید وظیفه Gradle را اجرا کنیم: gradle init --type java-application اجازه دهید به برخی از سوالات در طول مسیر پاسخ دهیم، به عنوان مثال، اینکه می‌خواهیم از Groovy DSL (زبان استاندارد توصیف وظایف برای Gradle) و چارچوب تست JUnit استفاده کنیم (ما در بررسی دیگری در مورد این موضوع صحبت خواهیم کرد). پس از ایجاد مجموعه فایل های زیر را دریافت خواهیم کرد:
معرفی سریع Gradle - 3
در مرحله اول، پس از مقداردهی اولیه، ما یک پوشش مخصوص از پیش پیکربندی شده برای نسخه Gradle خود دریافت می کنیم - این یک اسکریپت خاص است. من به شما توصیه می کنم در اسناد رسمی - " The Gradle Wrapper " در مورد آن بیشتر بخوانید. در مرحله دوم، ما اسکریپت Gradle Build - فایل build.gradle را می بینیم. این فایل اصلی است که توضیح می‌دهد پروژه ما از چه کتابخانه‌ها و چارچوب‌هایی استفاده می‌کند، چه افزونه‌هایی باید به پروژه متصل شوند و وظایف مختلف را شرح می‌دهد. من به شما توصیه می کنم در اسناد رسمی درباره این فایل بیشتر بخوانید: " ساخت اسکریپت مبانی ".
معرفی سریع Gradle - 4

پلاگین ها و وظایف

اگر اکنون به محتویات Build Script نگاه کنیم، بخش افزونه ها را خواهیم دید:
plugins {
    id 'java'
    id 'application'
}
اینها همان افزونه هایی هستند که قبلاً در مورد آنها صحبت کردیم. و اگر افزونه هایی وجود دارد، وظایفی وجود دارد که اکنون در دسترس ما هستند. می‌توانیم دستور gradle tasks را اجرا کنیم و ببینیم که اکنون چه کاری می‌توانیم با پروژه انجام دهیم:
معرفی سریع Gradle - 5
به عنوان مثال، با اجرا کردن، gradle runکلاس اصلی برنامه جاوا خود را راه اندازی می کنیم:
معرفی سریع Gradle - 6
همانطور که می بینیم در زیر همینطور نوشته شده است 2 actionable tasks: 1 executed, 1 up-to-date این یعنی چه؟ این به این معنی است که در مجموع 2 کار تکمیل شده است: علاوه بر این، 1 کار در واقع تکمیل شده است و یکی اجرا نشده است، زیرا ... به روز است، یعنی وضعیت جاری است و کاری انجام نشده است. ما می توانیم به اصطلاح "Dry Run" را اجرا کنیم: gradle run -m بیایید این دستور را اجرا کنیم، خواهیم دید که چه وظایفی برای اجرای وظیفه اجرا می شود:
معرفی سریع Gradle - 7
همانطور که می بینیم، در مجموع 4 کار تکمیل شد: قبل از اجرا، کلاس های وظیفه وابستگی را اجرا می کرد. خود کلاس دارای 2 وابستگی است و بنابراین compileJava و processResources را نیز اجرا می کند. هنگامی که ما یک کار را انجام می دهیم، می توانیم آن را در حین مشاهده سطح مشخصی از گزارش ها انجام دهیم (سطح ورود تعیین می کند که چقدر پیام های مهمی را می خواهیم ببینیم). به عنوان مثال، ما می توانیم انجام دهیم gradle run -i. این همچنین پیام های اطلاعاتی مانند:
Task :classes UP-TO-DATE
Skipping task ':classes' as it has no actions.
برای کسب اطلاعات بیشتر در مورد ورود به سیستم Gradle، به شما توصیه می کنم به اسناد رسمی مراجعه کنید: " Gradle Logging ". همانطور که می بینیم، وظیفه کلاس ها نادیده گرفته شد، زیرا به روز است ، یعنی وضعیت فعلی است، هیچ کاری لازم نیست انجام شود، بنابراین هیچ اقدامی وجود نداشت. این به این دلیل است که Gradle به طور پیش فرض دارای " بررسی های به روز " یا به اصطلاح ساخت افزایشی است. می توانید اطلاعات بیشتری در مورد این مکانیسم در مستندات Gradle بخوانید: " بررسی های به روز (AKA Incremental Build) ". اما این مکانیسم را می توان با اجرای وظیفه ای که پرچم --rerun-tasks را مشخص می کند غیرفعال کرد. مثلا، gradle run --rerun-tasks. سپس خواهیم دید: 2 کار قابل اجرا: 2 اجرا شده همانطور که می بینید، تعداد وظایف اجرا شده فقط سطح اول نمودار را در نظر می گیرد، یعنی خود کار اجرا شده و آن وظایفی که مستقیماً به آنها بستگی دارد. ، کلاس ها. وظایفی که کلاس‌ها به آن‌ها وابسته هستند، در اینجا شمارش نمی‌شوند (اگرچه زمانی که وظیفه کلاس‌ها اجرا می‌شود، اجرا می‌شوند). همچنین باید در مورد وظایف مطالعه کنید:
معرفی سریع Gradle - 8

وابستگی ها

یکی از وظایف اصلی هر سیستم ساخت، مدیریت وابستگی ها است، یعنی اینکه پروژه ما به کدام کتابخانه ها/چارچوب ها نیاز دارد. سیستم ساخت باید اطمینان حاصل کند که آنها در زمان مناسب در دسترس هستند و مصنوعات نهایی برنامه ما را به روش صحیح جمع آوری می کند. به طور پیش فرض، پس از gradle init برای برنامه های جاوا، محتوای زیر را در اسکریپت ساخت مشاهده خواهیم کرد:
dependencies {
    implementation 'com.google.guava:guava:26.0-jre'
    testImplementation 'junit:junit:4.12'
}
در اینجا بلافاصله مشخص می شود که ما چه چیزی را به هم وصل می کنیم. اما بدون درک کمی، مشخص نیست که پیاده سازی و testImplementation چیست؟ در اینجا باید دوباره به مستندات Gradle بپردازیم، زیرا مستندات Gradle به خوبی نوشته شده است. به آن " مدیریت تنظیمات وابستگی " می گویند. همانطور که در مستندات ذکر شده است، هر وابستگی با محدوده خاصی اعلام می شود - منطقه ای که این وابستگی در آن در دسترس خواهد بود. این محدوده توسط برخی از پیکربندی ها مشخص شده است که هر یک نام منحصر به فرد دارند. همچنین جالب است که بسیاری از پلاگین های Gradle تنظیمات از پیش تعریف شده را اضافه می کنند. برای اینکه بفهمیم چه پیکربندی هایی داریم که می توانیم اجرا کنیم: gradle --console plain dependencies به این ترتیب لیستی از تمام پیکربندی های موجود و وابستگی های آنها را خواهیم دید. می‌توانیم این فهرست را فیلتر کنیم تا فقط تنظیمات موجود را ببینیم: gradle --console plain dependencies | find " - " چگونه بدانیم از چه چیزی استفاده کنیم؟ شما باید در اینجا کمی مطالعه کنید. زیرا ما از افزونه "جاوا" استفاده می کنیم، بنابراین اجازه دهید با مستندات آن و بخش " مدیریت وابستگی " شروع کنیم. در اینجا می بینیم که قبلاً یک پیکربندی (معروف به دامنه) به نام "کامپایل" وجود داشت و به معنای "وابستگی مورد نیاز در هنگام کامپایل" بود. اما سپس (به انگلیسی Superseded) با پیاده سازی جایگزین شد. شما می توانید در مورد جایگزینی در بخش " API و جداسازی پیاده سازی " بیشتر بخوانید. به نظر می رسد که این وابستگی در "مسیر کلاس کامپایل" خواهد بود. اما گاهی اوقات ما می خواهیم که وابستگی ما در مصنوع نهایی گنجانده شود. برای چی؟ به عنوان مثال، ما یک jar اجرایی خواهیم داشت که باید همه چیز لازم را داشته باشد. پس باید چیکار کنیم؟ اولاً ، چنین پشتیبانی "خارج از جعبه" وجود ندارد (یعنی به طور پیش فرض بدون هیچ گونه اقدام اضافی). این با این واقعیت توضیح داده می شود که همه می خواهند آرشیو را به روش خود جمع آوری کنند و Gradle سعی می کند حداقلی باشد. ما همچنین نمی توانیم از آرشیوهای jar در مسیر کلاس (بدون دستکاری های اضافی در کد) استفاده کنیم، زیرا به این ترتیب کار نمی کند (برای جزئیات بیشتر به " Oracle: Adding Classes to the Classpath File JAR " مراجعه کنید. بنابراین، زیباترین راه، کد زیر در اسکریپت ساخت است:
jar {
    manifest {
        attributes 'Main-Class': 'jrgradle.App'
    }
    from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
در تنظیمات jar task ما مشخص می‌کنیم که چه چیزی به مانیفست فایل jar اضافه می‌شود (به " Oracle: Setting an Application's Entry Point " مراجعه کنید. و سپس می گوییم که تمام وابستگی هایی که برای کامپایل لازم بود در جار گنجانده می شود. یک جایگزین استفاده از " پلاگین سایه Gradle " است. ممکن است پیچیده به نظر برسد، اما سایر پلاگین ها می توانند زندگی را آسان تر کنند. به عنوان مثال، هنگام ایجاد یک برنامه وب (برخلاف یک برنامه جاوای معمولی در حال اجرا)، از یک پلاگین ویژه - " Gradle War Plugin " استفاده می کنیم که رفتار متفاوتی دارد و زندگی ما در آنجا آسان تر می شود (همه وابستگی های لازم باعث می شود توسط خود افزونه در یک دایرکتوری ویژه جداگانه قرار داده شود. این کار با نحوه ساختار برنامه های کاربردی تنظیم می شود. اما این یک داستان کاملاً متفاوت است).
معرفی سریع Gradle - 9

نتایج

Gradle یک انتخاب عالی برای سیستم های ساخت پروژه است. این با این واقعیت تأیید می شود که توسط توسعه دهندگان پروژه های معروفی مانند Spring و Hibernate استفاده می شود. فقط ابتدایی ترین چیزها در بالا مورد بحث قرار گرفت. پشت آن ها میلیون ها ویژگی و فرصتی که توسعه دهندگان دارند پنهان است. Gradle همچنین از ایجاد پروژه های چند ماژول پشتیبانی می کند که در این بررسی به آن پرداخته نشده است، اما Gradle خود یک آموزش عالی دارد: " ایجاد ساخت های چند پروژه ". امیدوارم این بررسی همچنین نشان دهد که اسناد Gradle در 5+ نوشته شده است و اگر بدانید کجا باید جستجو کنید، می توانید به راحتی آنچه را که نیاز دارید پیدا کنید. و این زمانی اتفاق می افتد که اصول اولیه را درک کنید. علاوه بر این، Gradle آموزش های عالی دارد. من می خواهم با یک لیست کوچک از چیزهای دیگری که با استفاده از Gradle می توانید مشاهده کنید به پایان برسانم:
معرفی سریع Gradle - 10
#ویاچسلاو
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION