היקפי התלות של Maven

1. הקדמה

Maven הוא אחד מכלי הבנייה הפופולריים ביותר במערכת האקולוגית של Java, ואחד מתכונות הליבה שלה הוא ניהול תלות.

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

2. תלות מעבר

במילים פשוטות, ישנם שני סוגים של תלות במייבן ישיר ו מעבר.

תלות ישירה הם אלה שנכללים במפורש בפרויקט. אלה יכולים להיכלל בפרויקט באמצעות תגיות:

 צומת צומת 4.12 

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

אנו יכולים לרשום את כל התלות כולל תלות מעבר בפרויקט באמצעות: תלות mvn: עץ פקודה.

3. היקפי תלות

טווחי תלות יכולים לעזור להגביל את מעבר התלות והם משנים את מסלול הכיתה למשימות שונות שנבנו. ל- Maven 6 טווחי תלות המוגדרים כברירת מחדל.

וחשוב להבין שכל היקף - למעט יְבוּא - אכן משפיעה על תלות מעבר.

3.1. לְלַקֵט

זהו היקף ברירת המחדל כאשר לא ניתן היקף אחר.

תלות עם היקף זה זמינות על מסלול הכיתה של הפרויקט בכל משימות הבנייה והן מועברות לפרויקטים התלויים.

חשוב מכך, תלות אלה הן גם חולפות:

 commons-lang commons-lang 2.6 

3.2. מסופק

היקף זה משמש לסימון תלות שיש לספק בזמן הריצה על ידי JDK או מיכלומכאן השם.

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

לדוגמא, שרת אינטרנט שכבר מספק את ה- API של Servlet בזמן ריצה, ולכן בפרויקט שלנו ניתן להגדיר תלות אלה באמצעות בתנאי תְחוּם:

 javax.servlet servlet-api 2.5 מסופק 

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

3.3. זמן ריצה

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

דוגמה טובה לתלות שצריכה להשתמש בהיקף זמן ריצה היא מנהל התקן JDBC:

 mysql mysql-connector-java 6.0.6 זמן ריצה 

3.4. מִבְחָן

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

מקרה השימוש הסטנדרטי עבור היקף זה הוא הוספת ספריית בדיקות כמו JUnit ליישום שלנו:

 מבחן junit junit 4.12 

3.5. מערכת

מערכת היקף דומה בהרבה ל בתנאי תְחוּם. ההבדל העיקרי בין שני ההיקפים הוא בכך מערכת מחייב אותנו להפנות ישירות לצנצנת ספציפית במערכת.

הדבר החשוב לזכור הוא שבניית הפרויקט איתו מערכת תלות היקף עלולה להיכשל במכונות שונות אם תלות אינן קיימות או ממוקמות במקום אחר מזה systemPath נקודות ל:

 com.baeldung מערכת תלות מותאמת אישית 1.3.2 $ {project.basedir} /libs/custom-dependency-1.3.2.jar 

3.6. יְבוּא

היקף זה נוסף ב- Maven 2.0.9 ו- זה זמין רק לסוג התלות פום. אנו נדבר יותר על סוג התלות במאמרים עתידיים.

יְבוּא מציין כי יש להחליף תלות זו בכל התלות האפקטיבית המוצהרת ב- POM שלה:

 com.baeldung custom-project 1.3.2 ייבוא ​​פום 

4. היקף ומעבר

כל היקף תלות משפיע על תלות מעבר בדרך שלו. המשמעות היא שתלות שונות במעבר עשויות להסתיים בפרויקט בהיקפים שונים.

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

לאחר מכן:

  • בשביל ה לְלַקֵט היקף, כל התלות עם היקף זמן ריצה יימשך עם זמן ריצה היקף, בפרויקט וכל התלות עם לְלַקֵט היקף יימשך עם לְלַקֵט היקף, בפרויקט
  • בשביל ה בתנאי היקף, שניהם זמן ריצה ו לְלַקֵט תלות היקף תימשך עם בתנאי היקף, בפרויקט
  • בשביל ה מִבְחָן היקף, שניהם זמן ריצה ו לְלַקֵט תלות מעבר חולפת תימשך עם ה- מִבְחָן היקף, בפרויקט
  • בשביל ה זמן ריצה היקף, שניהם זמן ריצה ו לְלַקֵט תלות מעבר חולפת תימשך עם ה- זמן ריצה היקף, בפרויקט

5. מסקנה

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

אם אתה רוצה לחפור עמוק יותר ב- Maven, התיעוד הוא מקום נהדר להתחיל בו.