נמלה מול מייבן מול גרדל

מאמר זה הוא חלק מסדרה: • מבוא ל- Gradle

• נמלה מול מייבן מול גרדל (מאמר נוכחי) • כתיבת תוספי Gradle בהתאמה אישית

• יצירת צנצנת שמנה ב- Gradle

1. הקדמה

במאמר זה נחקור שלושה כלי בנייה אוטומטיים של Java ששלטו במערכת האקולוגית של JVM - Ant, Maven ו- Gradle.

נציג כל אחד מהם ונחקור כיצד התפתחו כלי אוטומציה לבניית ג'אווה.

2. נמלה אפאצ'י

בהתחלה, Make היה הכלי היחיד לאוטומציה לבנות זמין מעבר לפתרונות ביתיים. Make קיים מאז 1976 וככזה, הוא שימש לבניית יישומי ג'אווה בשנים הראשונות של Java.

עם זאת, הרבה מוסכמות מתוכניות C לא השתלבו במערכת האקולוגית של ג'אווה, כך שעם הזמן אנט השתלט על חלופה טובה יותר.

Apache Ant ("עוד כלי מסודר") היא ספריית Java המשמשת לאוטומציה של תהליכי בנייה ליישומי Java. בנוסף, ניתן להשתמש ב- Ant לבניית יישומים שאינם של Java. בתחילה זה היה חלק מבסיס הקוד של אפאצ'י טומקט ושוחרר כפרויקט עצמאי בשנת 2000.

בהיבטים רבים, נמלה דומה מאוד ל- Make, והיא פשוטה דיה כך שכל אחד יכול להתחיל להשתמש בה ללא תנאים מוקדמים במיוחד. קבצי בניית נמלים נכתבים ב- XML, ועל פי מוסכמה, הם נקראים build.xml.

שלבים שונים של תהליך בנייה מכונים "מטרות".

הנה דוגמה לא build.xml קובץ לפרויקט Java פשוט עם שלום עולם מעמד ראשי:

קובץ build זה מגדיר ארבעה יעדים: לְנַקוֹת, לְלַקֵט, קַנקַן ו לָרוּץ. לדוגמה, אנו יכולים לאסוף את הקוד על ידי הפעלת:

קומפילציה של נמלים

זה יפעיל את המטרה לְנַקוֹת ראשית אשר תמחק את ספריית "המחלקות". אחרי זה המטרה לְלַקֵט ישחזר את הספרייה ויקבץ לתוכה את תיקיית src.

היתרון העיקרי של נמלה הוא הגמישות שלה. נמלה אינה כופה מוסכמות קידוד או מבני פרויקטים. כתוצאה מכך, פירוש הדבר כי Ant דורשת ממפתחים לכתוב את כל הפקודות בעצמם, מה שלעיתים מוביל לקבצי ענק של XML לבנות שקשה לשמור עליהם.

מכיוון שאין מוסכמות, עצם הידיעה על נמלה אינה אומרת שנבין במהירות כל קובץ בניית נמלים. סביר להניח שייקח קצת זמן להתרגל לקובץ נמלים לא מוכר, וזה חיסרון בהשוואה לכלים האחרים והחדשים יותר.

בתחילה לא הייתה לנמלה תמיכה מובנית בניהול תלות. עם זאת, מאחר וניהול תלות הפך להיות חובה בשנים מאוחרות יותר, אפאצ'י אייבי פותחה כפרויקט משנה של פרויקט אפאצ'י נמלה. הוא משולב עם Apache Ant, והוא פועל על פי אותם עקרונות העיצוב.

עם זאת, מגבלות הנמלים הראשוניות בגלל אי ​​תמיכה מובנית בניהול תלות ותסכולים בעבודה עם קבצי בניית XML בלתי ניתנים לניהול הובילו ליצירת Maven.

3. אפאצ'י מייבן

Apache Maven הוא ניהול תלות וכלי אוטומציה לבנייה, המשמש בעיקר ליישומי Java. Maven ממשיך להשתמש בקבצי XML ממש כמו Ant אך בצורה הרבה יותר ניתנת לניהול. שם המשחק כאן הוא מוסכמות על פני תצורה.

בעוד שנמלה נותנת גמישות ודורשת שהכל ייכתב מאפס, Maven מסתמך על מוסכמות ומספק פקודות מוגדרות מראש (יעדים).

במילים פשוטות, Maven מאפשר לנו להתמקד במה שהבנייה שלנו צריכה לעשות, ונותן לנו את המסגרת לעשות את זה. היבט חיובי נוסף של Maven היה שהוא סיפק תמיכה מובנית בניהול תלות.

קובץ התצורה של Maven, המכיל הוראות לניהול בנייה ותלות, נקרא על פי אמנה pom.xml. בנוסף, מייבן גם רושם מבנה קפדני של פרויקט, בעוד שנמלה מספקת גמישות גם שם.

הנה דוגמה של pom.xml קובץ לאותו פרויקט פשוט של Java עם שלום עולם מעמד ראשי מלפני:

 4.0.0 baeldung maven דוגמה 0.0.1-SNAPSHOT דוגמא Maven מבחן junit junit 4.12 

עם זאת, כעת מבנה הפרויקט גם סטנדרטי ותואם את מוסכמות Maven:

+ --- src | + --- ראשי | | + --- ג'אווה | | | \ --- com | | | \ --- באלדונג | | | \ --- maven | | | HelloWorld.java | | | | | \ --- משאבים | \ --- מבחן | + --- ג'אווה | \---אֶמְצָעִי

בניגוד לנמלה, אין צורך להגדיר כל אחד מהשלבים בתהליך הבנייה באופן ידני. במקום זאת, אנו יכולים פשוט להתקשר לפקודות המובנות של מייבן.

לדוגמה, אנו יכולים לאסוף את הקוד על ידי הפעלת:

לקמפל mvn

בבסיסו, כפי שצוין בדפים הרשמיים, Maven יכול להיחשב במסגרת ביצוע תוספים, מכיוון שכל העבודה נעשית על ידי תוספים. Maven תומך במגוון רחב של תוספים זמינים, וכל אחד מהם יכול להיות מוגדר בנוסף.

אחד התוספים הזמינים הוא תוסף התלות של Apache Maven שיש לו תלות בעותק מטרה שתעתיק את התלות שלנו לספרייה שצוינה.

כדי להציג תוסף זה בפעולה, בואו נכלול תוסף זה בתוכנת שלנו pom.xml לתקן ולהגדיר ספריית פלט לתלות שלנו:

   org.apache.maven.plugins maven-dependency-plugin copy-dependencies יעד / תלות עותק-תלות 

תוסף זה יבוצע ב- חֲבִילָה שלב, אז אם אנחנו רצים:

חבילת mvn

אנו נבצע תוסף זה ונעתיק תלות לתיקיית היעד / התלות.

יש גם מאמר קיים כיצד ליצור JAR הפעלה באמצעות תוספי Maven שונים. בנוסף, לקבלת סקירה מפורטת של Maven, עיין במדריך הליבה הזה ב- Maven, שם נחקרות כמה מהתכונות העיקריות של Maven.

Maven הפך פופולרי מאוד מכיוון שקבצי build היו סטנדרטיים ולקח פחות זמן לתחזק קבצי build בהשוואה ל- Ant. עם זאת, אם כי סטנדרטיים יותר מקבצי Ant, קבצי תצורה של Maven עדיין נוטים להיות גדולים ומסורבלים.

המוסכמות הקפדניות של מייבן כוללות מחיר להיות הרבה פחות גמיש מנמלה. התאמה אישית של יעדים קשה מאוד, ולכן כתיבת סקריפטים בהתאמה אישית היא הרבה יותר קשה לביצוע, בהשוואה לנמלה.

אף על פי ש Maven ביצעה כמה שיפורים רציניים ביחס להפיכת תהליכי הבנייה של היישומים לקלים ומתוקננים יותר, היא עדיין כוללת מחיר בגלל היותה הרבה פחות גמישה מ- Ant. זה מוביל ליצירתו של Gradle המשלב את המיטב משני העולמות - הגמישות של Ant ותכונותיו של Maven.

4. דרדל

Gradle הוא ניהול תלות וכלי אוטומציה לבנות ש נבנה על פי המושגים Ant ו- Maven.

אחד הדברים הראשונים שאנו יכולים לציין לגבי Gradle הוא שהוא אינו משתמש בקבצי XML, בניגוד ל- Ant או Maven.

עם הזמן, מפתחים התעניינו יותר ויותר בקיום ועבודה עם שפה ספציפית לתחום - מה שבאופן פשוט, יאפשר להם לפתור בעיות בתחום ספציפי באמצעות שפה המותאמת לאותו תחום מסוים.

זה אומץ על ידי Gradle, המשתמשת ב- DSL המבוסס על גרובי או קוטלין. זה הוביל לקבצי תצורה קטנים יותר עם פחות עומס מכיוון שהשפה תוכננה במיוחד לפתרון בעיות תחום ספציפיות. קובץ התצורה של Gradle נקרא על פי אמנה build.gradle בגרובי, או build.gradle.kts בקוטלין.

שימו לב שקוטלין מציע תמיכה טובה יותר ב- IDE מ- Groovy לצורך השלמה אוטומטית וגילוי שגיאות.

הנה דוגמה לא build.gradle קובץ לאותו פרויקט פשוט של Java עם שלום עולם מעמד ראשי מלפני:

החל תוסף: 'java' מאגרים {mavenCentral ()} jar {baseName = 'gradleExample' version = '0.0.1-SNAPSHOT'} תלות {testImplementation 'junit: junit: 4.12'}

אנו יכולים לאסוף את הקוד על ידי הפעלת:

שיעורי דרגה

ביסודה, Gradle בכוונה מספק מעט מאוד פונקציונליות. תוספים מוסיפים את כל התכונות השימושיות. בדוגמה שלנו, השתמשנו ג'אווה תוסף המאפשר לנו לקמפל קוד Java ותכונות חשובות אחרות.

גרדל נתן את צעדי הבנייה בשם "משימות", בניגוד ל"מטרות "של אנט או ל"שלבים" של מייבן. עם Maven השתמשנו בתוסף התלות של Apache Maven, וזו מטרה ספציפית להעתיק תלות לספרייה מסוימת. עם Gradle נוכל לעשות את אותו הדבר באמצעות משימות:

copy copyDependences (סוג: Copy) {מ- configurations.compile ל 'תלות'}

אנו יכולים להפעיל את המשימה הזו על ידי ביצוע:

העתק דרגה תלות

5. מסקנה

במאמר זה הצגנו את Ant, Maven ו- Gradle - שלושה כלי אוטומציה לבניית Java.

באופן לא מפתיע, מייבן מחזיקה ברוב שוק כלי הבנייה כיום.

גרדל, לעומת זאת, ראה אימוץ טוב בבסיסים מורכבים יותר, מהסיבות הבאות:

  • הרבה פרויקטים של קוד פתוח כמו אביב משתמשים בזה עכשיו
  • זה מהיר יותר ממייב ברוב התרחישים, הודות לבניינים המצטברים שלו
  • הוא מציע שירותי ניתוח וניקוי באגים מתקדמים

עם זאת נראה כי ל- Gradle יש עקומת למידה תלולה יותר, במיוחד אם אינך מכיר את גרובי או קוטלין.

הַבָּא » כתיבת תוספי Gradle בהתאמה אישית « מבוא קודם ל- Gradle