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

Ant Vs Maven Vs Gradle



במהלך פיתוח תוכנה, מפתחים צריכים לבנות את אותו קוד שוב ושוב. לעתים קרובות הם מנסים להשתמש בסקריפטים bash או בשפות scripting אחרות כדי להפוך את המשימה לאוטומטית. עם זאת, קיימים כלי בנייה המתאימים יותר לאוטומציה של בנייה. כלי הבנייה הבולטים הם:

בואו לחקור את הכלים למידע נוסף.







נמלת אפאצ'י עם קיסוס

Apache Ant הוא כלי שורת פקודה מבוסס ג'אווה המשתמש בקובצי XML להגדרת סקריפטים לבנייה. הוא משמש בעיקר לבניית Java, אך הוא יכול לשמש גם לפיתוח C/C ++. משימות מובנות מספקות דרכים לאסוף, להרכיב, לבדוק ולהפעיל יישומי תוכנה. משתמשים יכולים גם ליצור antlibs משלהם כדי לשפר את הפונקציונליות של Ant. Apache Ivy הוא כלי לניהול תלות המשתלב בקלות עם Ant כדי לספק מערכת אקולוגית חזקה יותר. פיתוח הנמלה החל בשנת 2000.



יתרונות



  • שליטה טובה יותר על תהליך הבנייה הכולל
  • גמיש מספיק לעבודה עם כל תהליך עבודה

חסרונות





  • קבצי build מבוססי XML יכולים להיות גדולים ובלתי ניתנים לתחזוקה
  • הרבה זמן ומשאבים נחוצים לתחזוקת סקריפטים לבנייה
  • קשה להשיג אינטגרציה של IDE

נמלה עם קיסוס דוגמה

אתה יכול להתקין את הנמלה האחרונה מ פה . עליך להוריד את ה- zip, להרחיב ולשים את תיקיית הפח בנתיב שלך. תוכל להשתמש בפקודה הבאה כדי לבדוק אם נמלה מותקנת כראוי:

$ נמלה-גִרְסָה
נמלת אפאצ'י(TM)גרסה 1.10.1 שנערכה בפברואר2 2017.

לאחר התקנת הנמלה, תוכל להוריד את צנצנת Ivy העדכנית ביותר ולשים אותה בתיקיית lib בתוך ספריית הנמלים.



לאחר התקנת Ant, צור תיקיות helloworld ו- helloworld/src. בתוך תיקיית src, שים קובץ helloworld.java עם הקוד:

/ **************************

מדפיס 'שלום עולם!'

*************************** /

פּוּמְבֵּי מעמדשלום עולם{

פּוּמְבֵּי סטָטִי בָּטֵלרָאשִׁי( חוּט []טוען) {
מערכת .הַחוּצָה.println('שלום עולם!');
}

}

כעת בתיקיית helloworld צור קובץ build.xml עם הקוד הבא:

xmlns: קיסוס='antlib: org.apache.ivy.ant' שֵׁם='שלום עולם' בְּרִירַת מֶחדָל='קַנקַן'>

שֵׁם='src.dir' ערך='src'/>
שֵׁם='build.dir' ערך='לִבנוֹת'/>
שֵׁם='classes.dir' ערך='$ {build.dir}/שיעורים'/>
שֵׁם='am.dir' ערך='$ {build.dir} / bin'/>
שֵׁם='lib.dir' ערך='ליב' />
תְעוּדַת זֶהוּת='lib.path.id'>
לך='$ {lib.dir}' />
>

שֵׁם='לִפְתוֹר'>
/>
>

שֵׁם='לְנַקוֹת'>
לך='$ {build.dir}'/>
>

שֵׁם='לְלַקֵט' תלוי='לִפְתוֹר'>
לך='$ {classes.dir}'/>
srcdir='$ {src.dir}' destdir='$ {classes.dir}' מסלול כיתה='lib.path.id'/>
>

שֵׁם='קַנקַן' תלוי='לְלַקֵט'>
לך='$ {bin.dir}'/>
גורל='$ {bin.dir}/$ {ant.project.name} .jar' basedir='$ {classes.dir}'/>
>

>

ובאותה תיקיית helloworld, צור את הקובץ ivy.xml עם הקוד הבא:

גִרְסָה='2.0'>
אִרגוּן='org.apache' מודול='שלום עולם'/>
>
org='ג'וניט' שֵׁם='ג'וניט' לְהַאִיץ='4.12'/>
>
>

מבנה הספרייה צריך להיראות כך:

שלום עולם
|- build.xml
| - ivy.xml
`- src
`- helloworld.java

כעת תוכל להריץ את ה- build באמצעות הפקודה:

$נְמָלָהקַנקַן

בנייה מוצלחת אמורה לספק פלט כזה:

צנצנת נמלים $
קובץ Build: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

לִפְתוֹר:
[קיסוס: אחזור] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: retrieve] :: הגדרות טעינה :: url = jar: file:/Users/zak/BuildTools/ANT/apache
-ant-1.10.1/lib/ivy-2.4.0.jar! /org/apache/ivy/core/settings/ivysettings.xml
[קיסוס: אחזור] :: פתרון תלות :: org.apache#helloworld; [מוגן בדוא'ל]
MacBook-Air.local
[ivy: retrieve] confs: [ברירת מחדל]
[ivy: retrieve] נמצא junit#junit; 4.12 בפומבי
[ivy: retrieve] נמצא org.hamcrest#hamcrest-core; 1.3 בפומבי
[ivy: retrieve] :: דוח רזולוציה :: לפתור 397 ms :: artifacts dl 15 ms
-------------------------------------------------- -------------------
| | מודולים || חפצים |
| conf | מספר | חיפוש | dwnlded | גורש || מספר | dwnlded |
-------------------------------------------------- -------------------
| ברירת מחדל | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[קיסוס: אחזור] :: אחזור :: org.apache#helloworld
[ivy: retrieve] confs: [ברירת מחדל]
[ivy: retrieve] 0 חפצים שהועתקו, 4 כבר נאספו (0kB/39ms)

לְלַקֵט:
[mkdir] נוצר dir:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
שיעורים
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: אזהרה:
'כולל זמן ההרצאה' לא הוגדר, כברירת מחדל ל- build.sysclasspath = last; מוגדר כ- false
לבניינים חוזרים
[javac] אוסף קובץ מקור אחד ל/Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/build/classes

קַנקַן:
[mkdir] נוצר dir:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] קנקן בניין:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
helloworld.jar

בניית הצלחה
זמן כולל: 6 שניות

אתה יכול לנסות את קובץ הצנצנת כך:

$ java -cp build/bin/helloworld.קַנקַןשלום עולם
שלום עולם!

הגדרנו את קובץ הצנצנת שיש להכניס לתיקיית build/bin. התיקיות נוצרות במהלך הבנייה. פקודת צנצנת הנמלים קוראת ליעד הצנצנת ב- build.xml.

מייבן

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

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

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

יתרונות

  • הורדות תלות אוטומטיות
  • כל התלות נרשמות באופן אוטומטי בבקרת המקור כחלק מסקריפטים של Maven
  • מתקן ומפשט את תהליך הבנייה
  • משתלב בקלות עם מערכות IDE ומערכות CI/CD

חסרונות

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

דוגמה של מייבן

אתה יכול להוריד את Maven האחרונה מ- פה . אתה יכול לבדוק את ההתקנה כך:

$ mvn -גרסה
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017.-10-18T00:58:13-07: 00)
Maven home: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
גרסת ג'אווה: 1.8.0_74, ספק: תאגיד אורקל
בית הבית של Java: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/תוכן/דף הבית/jre
אזור ברירת מחדל: en_US, קידוד פלטפורמה: UTF-8
שם מערכת ההפעלה:'mac os x', גרסה:'10 .11.6 ', קשת:'x86_64', משפחה:'מק'

צור תיקיית helloworld וצור פרויקט עם הפקודה הבאה:

ארכיטיפ $ mvn: צור -DgroupId = com.שם החברה.שלום עולם-DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =שֶׁקֶר

הוא אמור ליצור את מבנה התיקיות ולייצר את הפלט שנראה כך:

[INFO] סריקה לפרויקטים ...
[מידע]
[מידע] ----------------------------------------------- -------------------------
[מידע] פרויקט בניית Maven Stub (ללא POM) 1
[מידע] ----------------------------------------------- -------------------------
[מידע]
[INFO] >>> maven-archetype-plugin: 3.0.0: create (default-cli)> צור-מקורות
@ עצמאי-פום >>>
[מידע]
[מידע]<<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ עצמאי-פום<<<
[מידע]
[מידע]
[INFO] --- maven-archetype-plugin: 3.0.0: create (default-cli) @ standalone-pom ---
[INFO] הפקת פרויקט במצב אצווה
[מידע] ----------------------------------------------- -----------------------------
[INFO] שימוש בפרמטרים הבאים ליצירת פרוייקט מארכיטיפ ישן (1.x):
maven-archetype-quickstart: 1.0
[מידע] ----------------------------------------------- -----------------------------
[INFO] פרמטר: basedir, Value:/Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] פרמטר: חבילה, ערך: com.companyname.helloworld
[INFO] פרמטר: groupId, ערך: com.companyname.helloworld
[INFO] פרמטר: artifactId, ערך: helloworld
[INFO] פרמטר: packagename, ערך: com.companyname.helloworld
[INFO] פרמטר: גרסה, ערך: 1.0-SNAPSHOT
פרויקט [INFO] נוצר מאתר -טיפוס ישן (1.x) בכתובת dir:/Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[מידע] ----------------------------------------------- -------------------------
[מידע] הבנה הצלחה
[מידע] ----------------------------------------------- -------------------------
[מידע] זמן כולל: 8.602 שניות
[INFO] הסתיים בתאריך: 2018-01-27T00: 05: 37-08: 00
[מידע] זיכרון סופי: 15M/152M
[מידע] ----------------------------------------------- -------------------------

מבנה התיקיות צריך להיראות כך:

שלום עולם
|- pom.xml
'- src
|- עיקרי
| '-java
| '-- עם
| '-- שם החברה
| '-- שלום עולם
| '- יישום Java
'-מִבְחָן
'-java
'-- עם
'-- שם החברה
'-- שלום עולם
'- AppTest.java

Pom.xml מכיל את תצורות הבנייה. בתוך pom.xml הקוד נראה כך:

xmlns='http://maven.apache.org/POM/4.0.0' xmlns: xsi='http://www.w3.org/2001/
מופע XMLSchema '
xsi: schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>4.0.0>
>com.companyname.helloworld>
>שלום עולם>
>קַנקַן>
>1.0-צילום>
>שלום עולם>
>http://maven.apache.org>
>
>
>ג'וניט>
>ג'וניט>
>3.8.1>
>מִבְחָן>
>
>
>

תוכל ליצור את קובץ הצנצנת באמצעות הפקודה הבאה:

חבילת $ mvn

[INFO] סריקה לפרויקטים ...
[מידע]
[מידע] ----------------------------------------------- -------------------------
[מידע] בניית helloworld 1.0-SNAPSHOT
[מידע] ----------------------------------------------- -------------------------
[מידע]
[INFO] --- maven-resources-plugin: 2.6: resources (default-resources) @ helloworld ---
[אזהרה] שימוש בקידוד פלטפורמה (UTF-8 בעצם) להעתיק משאבים מסוננים, כלומר
build תלוי בפלטפורמה!
[INFO] דלג על משאבים לא קיימים Directory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/resources
[מידע]
[INFO] --- maven-compiler-plugin: 3.1: compile (default-compile) @ helloworld ---
[INFO] זוהו שינויים - הידור מחדש של המודול!
[אזהרה] קידוד קבצים לא הוגדר, תוך שימוש בקידוד פלטפורמה UTF-8, כלומר build הוא
תלוי בפלטפורמה!
[INFO] אוסף קובץ מקור אחד ל/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/target/classes
[מידע]
[INFO] --- maven-resources-plugin: 2.6: testResources (default-testResources) @
שלום עולם ---
[אזהרה] שימוש בקידוד פלטפורמה (UTF-8 בעצם) להעתיק משאבים מסוננים, כלומר
build תלוי בפלטפורמה!
[INFO] דלג על משאבים לא קיימים Directory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/test/resources
[מידע]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] זוהו שינויים - הידור מחדש של המודול!
[אזהרה] קידוד קבצים לא הוגדר, תוך שימוש בקידוד פלטפורמה UTF-8, כלומר build הוא
תלוי בפלטפורמה!
[INFO] אוסף קובץ מקור אחד ל/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/test-classes
[מידע]
[INFO] --- maven-surefire-plugin: 2.12.4: test (default-test) @ helloworld ---
[INFO] מדריך הדוחות של Surefire:/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/
דוחות בטוחים

-------------------------------------------------- -----
T E S T S
-------------------------------------------------- -----
הפעלת com.companyname.helloworld.AppTest
ריצות הבדיקות: 1, כשלים: 0, שגיאות: 0, דילוג: 0, הזמן שחלף: 0.014 שניות

תוצאות :

בדיקות: 1, כישלונות: 0, שגיאות: 0, דילוג על 0

[מידע]
[INFO] --- maven-jar-plugin: 2.4: jar (default-jar) @ helloworld ---
[INFO] צנצנת בניין:/Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[מידע] ----------------------------------------------- -------------------------
[מידע] הבנה הצלחה
[מידע] ----------------------------------------------- -------------------------
[מידע] זמן כולל: 5.624 שניות
[INFO] הסתיים בתאריך: 2018-01-27T00: 11: 10-08: 00
[מידע] זיכרון סופי: 16M/114M
[מידע] ----------------------------------------------- -------------------------

אתה יכול להריץ את קובץ הצנצנת כך:

$ java -cp target/helloworld-1.0-צילום.קַנקַןעם.שם החברה.שלום עולם.אפליקציה
שלום עולם!

קובץ הצנצנת מוכנס לתיקיית היעד.

גראדל

גראדל משלב את העוצמה של נמלה ומייבן. הגרסה הראשונה של Gradle שוחררה בשנת 2012. היא זכתה לאימוץ מהיר. Google משתמשת בו כעת עבור מערכת ההפעלה אנדרואיד.

במקום XML, Gradle משתמש בשפת Groovy. כתוצאה מכך, קל יותר לכתוב ולקרוא קריאת סקריפטים. הוא השתמש בהתחלה ב- Ivy לניהול תלות, אך הוא משתמש כעת במנוע תלות משלו.

יתרונות

  • מספק סטנדרטיזציה תוך שמירה על גמישות
  • קל לקרוא ולכתוב סקריפטים לבנות
  • טוב יותר בטיפול בגירסאות מרובות של תלות
  • מסוגל להתמודד עם שפות תכנות וטכנולוגיות מרובות
  • קהילה פעילה המסייעת בפיתוח הכלי
  • Gradle DSL (שפה ספציפית לתחום) הופכת אותו למבנה תצורה פשוט
  • Gradle מספקת שיפורים בביצועים תוך שימוש בהדרגה, בניית מטמון ודמון Gradle

חסרונות

  • שילוב IDE לא טוב כמו מייבן

דוגמא של גראדל

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

$ gradle--גִרְסָה

-------------------------------------------------- ----------
גראדל4.5
-------------------------------------------------- ----------

זמן בנייה:2018-01-24 17: 04:52UTC
עדכון: 77d0ec90636f43669dc794ca17ef80dd65457bec

גרובי: 2.4.12
נמלה: נמלת אפאצ'י(TM)גרסה 1.9.9 שנערכה בפברואר2 2017.
JVM: 1.8.0_74(תאגיד אורקל25.74-b02)
מערכת הפעלה: Mac OS X 10.11.6 x86_64

לאחר מכן, צור את מבנה הספרייה הבא:

שלום עולם
| -לִבנוֹת.gradle
'-src
| -רָאשִׁי
'-java
'-שלום עולם
'-שלום עולם.java

עבור helloworld.java שים את הקוד מהדוגמה נמלה. ועבור build.gradle הכנס את הקוד הבא:

החלת תוסף: 'ג'אווה'

גִרְסָה= '1.0'

מאגרים{
mavenCentral()
}

תלות{
testCompile group: 'ג'וניט', שם: 'ג'וניט', גרסה: '4.12'
}

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

אתה יכול להשיג את המבנה על ידי הפעלה:

צנצנת $ gradle

לִבנוֹת מוּצלָח תוך 1 שניות
2משימות ניתנות לביצוע:2יצא לפועל

אתה יכול להריץ את הצנצנת שלך כך:

$ java -cp build/libs/helloworld-1.0.קַנקַןשלום עולם
שלום עולם!

קובץ הצנצנת מוכנס לתיקיית build/libs.

סיכום

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

הפניות: