JAVA_HOME צריך להצביע על JDK ולא על JRE

1. הקדמה

במדריך זה נדבר על יוצא מן הכלל שמייבאן מעמיד כאשר הוא מוגדר בצורה שגויה: JAVA_HOME צריך להצביע על JDK, לא על JRE.

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

2. ה JAVA_HOME בְּעָיָה

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

לדוגמה, התרחיש הנפוץ ביותר הוא קומפילציה של הקוד על ידי ביצוע ה- ג'אוואק פקודה.

אם JAVA_HOME אינו מצביע על התקנת JDK תקפה, Maven יזרוק שגיאה בכל ביצוע:

mvn -version # פלט ... משתנה הסביבה JAVA_HOME אינו מוגדר נכון משתנה סביבה זה נדרש להפעלת תוכנית זו הערה: JAVA_HOME צריך להצביע על JDK, לא על JRE

3. JDK או JRE

איך מאבן מאמת את JAVA_HOME נָתִיב?

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

הנה ה mvn בדיקת הפעלה עבור לינוקס (Apache Maven v3.5.4):

אם [-z "$ JAVA_HOME"]; ואז JAVACMD = `איזו java` אחרת JAVACMD =" $ JAVA_HOME / bin / java "fi אם [! -x "$ JAVACMD"]; ואז הד "משתנה הסביבה JAVA_HOME אינו מוגדר כהלכה"> & 2 הד "יש צורך במשתנה סביבה זה להפעלת תוכנית זו"> & 2 הד "הערה: JAVA_HOME צריך להצביע על JDK ולא JRE"> & 2 יציאה 1 fi

בדיקה זו אולי נראית סבירה במבט ראשון, אך עלינו לשקול זאת גם ל- JDK וגם ל- JRE יש פַּח תיקיה ושניהם מכילים הפעלה ג'אווה קוֹבֶץ.

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

מסיבה זו, an לקמפל mvn הפקודה תיכשל - כפי שנראה בסעיף המשנה הבא.

3.1. כישלון אוסף בגלל JRE במקום JDK

כרגיל עם הגדרות ברירת מחדל, הם מועילים מאוד אם יש לנו תצורה "רגילה".

לדוגמא, אם אנו מתקינים את Java 11 במערכת אובונטו 18.04 ולא מגדירים את ה- JAVA_HOME משתנה סביבה, Maven עדיין ימצא בשמחה את ה- JDK שלנו וישתמש בו למטרות השונות, כולל קומפילציה.

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

נניח שיש לנו את התצורה הבאה באובונטו 18.04:

  • JDK 11
  • JRE 8
  • JAVA_HOME הגדר לנתיב ההתקנה של JRE 8

אם אנו מבצעים את הבדיקה הבסיסית שלנו:

mvn - גרסה

נקבל פלט משמעותי כזה:

Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T18: 41: 47Z) בית Maven: /opt/apache-maven-3.6.0 גרסת Java: 1.8.0_191, ספק: Oracle Corporation, זמן ריצה: / usr / lib / jvm / java-8-openjdk-amd64 / jre אזור ברירת מחדל: en, קידוד פלטפורמה: UTF-8 שם מערכת הפעלה: "Linux", גרסה: "4.15.0-42-generic", קשת: "amd64", משפחה: " יוניקס "

בואו נראה מה יקרה אם ננסה להרכיב פרויקט:

קומפילציה נקייה mvn

כעת, אנו מקבלים שגיאה:

[שגיאה] ביצוע הכלי org.apache.maven.plugins נכשל: maven-compiler-plugin: 3.7.0: קומפילציה (ברירת מחדל לקומפילציה) באפליקציה שלי לפרויקט: כשל בקומפילציה [ERROR] אין מהדר בסביבה זו. אולי אתה רץ על JRE ולא על JDK?

3.2. תיקון שגיאת האוסף ברמת הפרויקט

כמו במקרים רבים אחרים עם Maven, מומלץ להגדיר הגדרות משמעותיות לכל המערכת - במקרה זה נשנה את ערך JAVA_HOME משתנה כמתואר בסעיף 5 כדי להצביע על ה- JDK במקום על ה- JRE.

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

ראשית, נפתח את pom.xml של הפרויקט שלנו, עבור לקטע build / pluginManagement / plugins והסתכל בערך עבור תוסף maven-compiler:

 תוסף maven-compiler 3.7.0 

לאחר מכן נוסיף לו תצורה כך שתשתמש בהפעלה מותאמת אישית ודלג על חיפוש אחר ג'אוואק בתוך ה JAVA_HOME / bin מַדרִיך:

 תוסף maven-compiler 3.7.0 נכון / usr / lib / jvm / java-11-openjdk-amd64 / bin / javac 

במערכות יוניקס, הפעלה זו צריכה להיות סקריפט עם הרשאה מספקת. במערכות Windows, זה צריך להיות .exe קוֹבֶץ.

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

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

כעת, הבנייה - כולל שלב ההידור עם ה- תוסף maven-compiler - מצליח.

4. בודקים את JAVA_HOME תְצוּרָה

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

4.1. בודק JAVA_HOME ב- Linux

פשוט פתח מסוף והקלד:

> $ JAVA_HOME / bin / javac -version

אם JAVA_HOME מצביע על JDK, הפלט אמור להיראות כך:

> javac 1.X.0_XX

אם JAVA_HOME לא מצביע על JDK, מערכת ההפעלה תשלח הודעת שגיאה:

> bash: / bin / javac: אין קובץ או ספרייה כאלה

4.2. בודק JAVA_HOME ב- Windows

פתח שורת פקודה והקלד:

% JAVA_HOME% \ bin \ javac -גרסה

אם JAVA_HOME מצביע על JDK, הפלט צריך להראות כמו:

> javac 1.X.0_XX

אם JAVA_HOME לא מצביע על JDK, מערכת ההפעלה תשלח הודעת שגיאה:

> המערכת לא מצליחה למצוא את הנתיב שצוין.

5. כיצד לפתור את הנושא

קודם כל עלינו לדעת היכן למצוא את ה- JDK שלנו:

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

ברגע שנדע את הדרך ל- JDK, נוכל להגדיר את הדרך שלנו JAVA_HOME משתנה הסביבה, תוך שימוש בתוצאות המתאימות למערכת ההפעלה המסוימת שלנו.

6. מסקנה

במדריך קצר זה דנו בסעיף "JAVA_HOME צריך להצביע על JDK ולא על JRE " שגיאת Maven ובחנה את הסיבה השורשית שלה.

לבסוף, דנו כיצד לבדוק את JAVA_HOME משתנה סביבה, וכיצד לוודא שהוא מצביע על JDK.


$config[zx-auto] not found$config[zx-overlay] not found