מה זה מייבן? בניית וניהול תלות עבור Java

אפאצ'י מייבן הוא אבן פינה בפיתוח ג'אווה, וכלי הניהול הבניין הנפוץ ביותר עבור Java. מודל התצורה היעיל המבוסס על XML של Maven מאפשר למפתחים לתאר או לתפוס במהירות את קווי המתאר של כל פרויקט מבוסס Java, מה שהופך את ההתחלה והשיתוף של פרויקטים חדשים לביצוע. Maven תומכת גם בפיתוח מונחה בדיקות, תחזוקת פרויקטים ארוכת טווח, ותצורתו ההצהרתית ומגוון הרחב של תוספים הופכים אותה לאופציה פופולרית עבור CI / CD. מאמר זה הוא מבוא מהיר ל- Maven, כולל מבנה ה- POM ומדריך הספריות של Maven, ופקודות לבניית פרויקט ה- Maven הראשון שלך.

שים לב שהמהדורה האחרונה של Maven נכון לכתיבת שורות אלה היא Maven 3.6.3.

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

Maven אינו כלי הבנייה היחיד במערכת האקולוגית של ג'אווה, אם כי הוא הפופולרי ביותר. Ant, דור קודם של כלי תצורה מבוסס XML, חסר שיטות סטנדרטיות מבוססות מוסכמות וניהול תלות, אך כן מציע גמישות שלא תמצאו עם Maven. Gradle הוא כלי חדש יותר הפועל על גבי המערכת האקולוגית של Maven (באמצעות מאגרי Maven), אך תומך בשימוש ב- DSL מבוסס גרובי או Kotlin לצורך תצורה. כל השלושה הם כלי בנייה טובים בפני עצמם, וכל אחד מהם יכול להשתלב בתהליך CI / CD. מה שחשוב הוא לבחור את המתאים לצרכים שלך ולדעת כיצד להשתמש בו באופן הולם.

איך עובד מייבן

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

  • ה- POM: הקובץ המתאר פרויקט Maven ואת התלות שלו.
  • המדריך: הפורמט הסטנדרטי לתיאור פרויקט Maven ב- POM.
  • מאגרים: היכן שתוכנות צד ג 'נשמרות ומתגלות.

ה- Maven POM : לכל פרויקט Java המשתמש ב- Maven יש קובץ POM (מודל אובייקט פרויקט) בספריית הבסיס שלו. pom.xmlמתאר את התלות של הפרויקט אומר לך איך לבנות אותו. ( תלות הן תוכנת צד שלישי הנדרשת על ידי הפרויקט. כמה דוגמאות נפוצות הן JUnit ו- JDBC. ראה במאגר המרכזי של Maven רשימה של כל הכלים הזמינים והתלות הפופולרית.)

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

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

גישה לתלות של Maven

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

מתקין את Maven

Maven הוא פרויקט Java, לכן לפני שתתקין אותו תצטרך להתקין את JDK בסביבת הפיתוח שלך. (ראה "מהו ה- JDK? מבוא לערכת הפיתוח של Java" לקבלת מידע נוסף על הורדה והתקנה של ה- JDK.)

לאחר שתגדיר את סביבת הפיתוח שלך ב- Java, תוכל להתקין את Maven בכמה שלבים:

  1. הורד את המהדורה האחרונה של Maven (Maven 3.6.3 נכון לכתיבת שורות אלה).
  2. חלץ את apache.mavenקובץ ה- zip למקום נוח.
  3. הצב את הקובץ על הנתיב שלך. לדוגמא, במערכת יוניקס או לינוקס: ייצא PATH=$PATH:/home/maven/.

כעת אמורה להיות לך גישה mvnלפקודה. הקלד mvn -vכדי לוודא שהתקנת את Maven בהצלחה.

POM Maven

השורש של כל פרויקט של Maven הוא pom.xmlהקובץ. למרות המוניטין של היותו מייגע, XML למעשה עובד די טוב למקרה השימוש הזה. ה- POM של Maven קל לקריאה וחושף הרבה ממה שקורה בפרויקט. (אם עבדת עם JavaScript, pom.xmlהמטרה שלה דומה לקובץ הצומת NPM package.json.)

רישום 1 מציג Maven פשוט מאוד pom.xml.

רישום 1. Simple Maven POM

   4.0.0 com.javaworld what-is-maven 1.0-SNAPSHOT Simple Maven Project jar   junit junit 4.12 test    

הבנת MOM POM

ברגע שאתה מקבל את העניין, ה- POM אינו מסתורי. כדי להתחיל, אתה יכול לדלג מעל ההקדמה ל- XML, אשר רק מתייחסת לסכמת ה- POM הרשמית. שים לב ל- XML ​​החל מ modelVersion. זה אומר ל- Maven באיזו גרסה של ה- POM להשתמש, במקרה זה Maven POM 4.0.0.

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

כעת, התבונן dependenciesבחלק של ה- POM, בו אנו מתארים את תלות הפרויקט. במקרה זה הכנסנו רק תלות אחת עד כה, JUnit. שים לב כי JUnit מתואר גם מבחינה שלה groupId, artifactId, ו version.

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

אירוח הפרויקט שלך במאגר Maven

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

  1. הפוך אותו לזמין באופן מקומי.
  2. פרסם במאגר מרוחק בניהול פרטי.
  3. פרסם למאגר פרטי מבוסס ענן.
  4. פרסם במאגר ציבורי כמו Maven Central.

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

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

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

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

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

בנה את חבילת Maven

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

לפקודה הראשונה שלך, נסה לבצע mvn package. למרות שאין לך עדיין קוד מקור, ביצוע פקודה זו אומר ל- Maven להוריד את התלות ב- JUnit. אתה יכול לבדוק את פלט הרישום של Maven כדי לראות שהתלות נטענה ..

היקף תלות

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

היקף נפוץ נוסף הוא provided, המסביר את המסגרת שהתלות מסופקת על ידי סביבת זמן הריצה. זה נראה לעיתים קרובות עם Servlets JARS בעת פריסה למיכל servlet, מכיוון שהמכולה תספק את ה- JARS האלה. עיין בתיעוד של Apache Maven לרשימה מלאה של היקפי התלות של Maven.

מבנה הספריות של מייבן

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

בשלב הבא תרצה להוסיף קובץ Java, אותו תמקם src/בספריית Maven . צור /src/main/java/com/javaworld/Hello.javaקובץ עם תוכן הרישום 2.

רישום 2. Hello.java

 com.javaworld public class Hello { public static void main(String[] args){ System.out.println("Hello, JavaWorld"); } } 

/srcהנתיב הוא המקום הסטנדרטי עבור קבצי המקור של הפרויקט. רוב הפרויקטים מכניסים את הקבצים העיקריים שלהם /src/main/, כאשר קבצי Java נכנסים לשביל הכיתה /java. בנוסף, אם ברצונך לכלול נכסים שאינם קוד, כמו קבצי תצורה או תמונות, תוכל להשתמש בהם /src/main/resources. נכסים בנתיב זה יתווספו לשביל הכיתה הראשי. קבצי בדיקה נכנסים /src/test/java.

לסקירה, להלן חלקים עיקריים במבנה פרויקט Maven (כהגדרתם על ידי מבנה Maven Standard Directory):

חלקים עיקריים במבנה המדריך הסטנדרטי של Maven

pom.xml קובץ מתאר הפרויקט
/ src / main / java מיקום קבצי המקור
/ src / main / resources מיקום נכסים שאינם מקור
/ src / test / java מיקום קבצי מקור הבדיקה
/יַעַד מיקום פלט הבנייה

ניהול פרויקט Maven שלך

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

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

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

פקודות נוספות של Maven

הזן mvn testכאשר אתה מוכן להריץ בדיקות יחידה שהגדרת /src/java/testבספרייה.

הזן mvn compileכשתהיה מוכן להרכיב את קבצי הכיתה של הפרויקט. אם אתה מפעיל התקנת פריסה חמה, פקודה זו מפעילה את מטעין המחלקות הפורדות החמות. (הכלי לפריסה חמה - כמו mvn spring-boot:runהפקודה של Spring Boot - יצפה בקבצי הכיתה לשינויים, והידור יגרום לקיבוץ קובצי המקור שלך, והיישום הרץ ישקף את השינויים האלה).

פתיחת פרויקט חדש: ארכיטיפים במייבן ובאביב

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

מסגרת האביב, שעובדת היטב עם Maven, מציעה יכולות מתוחכמות נוספות לדחיקת פרויקטים חדשים. כדוגמה, Spring Initializr הוא כלי המאפשר לך להגדיר מהר מאוד את האלמנטים שאתה רוצה באפליקציה חדשה. Initializr אינו ארכיטיפ של Maven כשלעצמו, אך הוא משרת את אותה מטרה לייצר פריסת פרויקט המבוססת על מפרט קדמי. מתוך Initializr, אתה יכול להקליד mvn archetype:generateולסרוק את האפשרויות כדי למצוא ארכיטיפ המתאים למה שאתה בונה.

הוספת תלות