logo

כיצד להגדיר CLASSPATH ב-Java

CLASSPATH: CLASSPATH הוא משתנה סביבה המשמש את Application ClassLoader כדי לאתר ולטעון את קבצי ה-.class. ה-CLASSPATH מגדיר את הנתיב, כדי למצוא מחלקות של צד שלישי ומחלקות מוגדרות על ידי משתמש שאינן הרחבות או חלק מפלטפורמת Java. כלול את כל הספריות המכילות קבצי .class וקובצי JAR בעת הגדרת ה-CLASSPATH.

עליך להגדיר את CLASSPATH אם:

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

ה-CLASSPATH תלוי במה שאתה מגדיר את ה-CLASSPATH. ל-CLASSPATH יש שם ספרייה או שם קובץ בסוף. הנקודות הבאות מתארות מה צריך להיות הסוף של ה-CLASSPATH.

  • אם JAR או zip, הקובץ מכיל קבצי מחלקה, ה-CLASSPATH מסתיים בשם של קובץ ה-zip או JAR.
  • אם קבצי מחלקה ממוקמים בחבילה ללא שם, ה-CLASSPATH מסתיים בספרייה המכילה את קבצי המחלקה.
  • אם קבצי מחלקה ממוקמים בחבילה בעלת שם, ה-CLASSPATH מסתיים בספרייה המכילה את חבילת השורש בשם החבילה המלא, כלומר החבילה הראשונה בשם החבילה המלאה.

ערך ברירת המחדל של CLASSPATH הוא נקודה (.). זה אומר שהספרייה הנוכחית היחידה שחיפשה. ערך ברירת המחדל של CLASSPATH עוקף כאשר אתה מגדיר את המשתנה CLASSPATH או באמצעות הפקודה -classpath (בקיצור -cp). שים נקודה (.) בהגדרה החדשה אם אתה רוצה לכלול את הספרייה הנוכחית בנתיב החיפוש.

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

אם ברצונך להגדיר נתיבי class מרובים, עליך להפריד כל CLASSPATH באמצעות נקודה-פסיק (;).

יישומי צד שלישי (MySQL ו-Oracle) המשתמשים ב-JVM יכולים לשנות את משתנה הסביבה CLASSPATH כך שיכלול את הספריות שבהן הם משתמשים. ניתן לאחסן את השיעורים בספריות או בקבצי ארכיון. השיעורים של פלטפורמת Java מאוחסנים ב-rt.jar.

ישנן שתי דרכים לדרכים להגדיר CLASSPATH: דרך שורת הפקודה או על ידי הגדרת משתנה סביבתי.

בואו נראה כיצד להגדיר את CLASSPATH של מסד הנתונים של MySQL:

שלב 1: לחץ על כפתור Windows ובחר בלוח הבקרה. בחר מערכת.

כיצד להגדיר CLASSPATH ב-Java

שלב 2: לחץ על הגדרות מערכת מתקדמות .

כיצד להגדיר CLASSPATH ב-Java

שלב 3: תיפתח תיבת דו-שיח. לחץ על משתני סביבה.

כיצד להגדיר CLASSPATH ב-Java

שלב 4: אם ה-CLASSPATH כבר קיים ב-System Variables, לחץ על כפתור Edit ואז שים נקודה-פסיק (;) בסוף. הדבק את הנתיב של קובץ MySQL-Connector Java.jar.

regex ב-java

אם ה-CLASSPATH לא קיים במשתני מערכת, לחץ על הלחצן חדש והקלד שם משתנה בתור CLASSPATH וערך משתנה כ C:Program FilesJavajre1.8MySQL-Connector Java.jar;.;

זכור: שים ;.; בסוף ה-CLASSPATH.

כיצד להגדיר CLASSPATH ב-Java

ההבדל בין PATH ל-CLASSPATH

נָתִיב CLASSPATH
PATH הוא משתנה סביבה. CLASSPATH הוא גם משתנה סביבה.
הוא משמש את מערכת ההפעלה כדי למצוא את קבצי ההפעלה (.exe). הוא משמש את Application ClassLoader כדי לאתר את קובץ ה-.class.
עליך לכלול את הספרייה המכילה קבצי exe. אתה נדרש לכלול את כל הספריות המכילות קבצי .class ו-JAR.
משתנה סביבת PATH לאחר שהוגדר, לא ניתן לעקוף. ניתן לעקוף את משתנה הסביבה CLASSPATH על ידי שימוש באפשרות שורת הפקודה -cp או -CLASSPATH הן לפקודה javac והן ל-java.

כיצד להגדיר CLASSPATH ב-Windows באמצעות שורת הפקודה

הקלד את הפקודה הבאה בשורת הפקודה שלך והקש אנטר.

 set CLASSPATH=%CLASSPATH%;C:Program FilesJavajre1.8
t.jar; 

בפקודה לעיל, הסט היא פקודת DOS פנימית המאפשרת למשתמש לשנות את ערך המשתנה. CLASSPATH הוא שם משתנה. המשתנה המוקף בסימן אחוז (%) הוא משתנה סביבה קיים. הנקודה-פסיק הוא מפריד, ואחרי ה-(;) יש את ה-PATH של קובץ rt.jar.

תערובת הומוגנית

כיצד פועלת תיקיית ext ב-Java

ספריית ה-ext עובדת קצת כמו ה-CLASSPATH. ספריית ext היא החלק של מנגנון טעינת המחלקה. המחלקות הזמינות בתוך JARs בספריית ext זמינות ליישומי Java.

הטבלה הבאה מדגימה את ההבדל העיקרי בין מנגנון CLASSPATH למנגנון ההרחבה:

מאפיינים CLASSPATH מנגנון הרחבה
סדר טעינת כיתות CLASSPATH נטען לאחר טעינת אתחול והרחבה. ext נטען לאחר טעינת האתחול אך לפני טעינת CLASSPATH.
תְחוּם זה יישום ספציפי. כל ה-JREs במארח הם משתנה הסביבה CLASSPATH. כל ה-JVMs פועלים ב-JRE java.ext.dirs ספציפיים.
שם חבילה java.class.path משמש למציאת הספריות וארכיוני JAR המכילים קבצי מחלקה. java.ext.dirs משמש כדי לציין היכן מנגנון ההרחבה טוען מחלקות.
מִפרָט הוא מצוין לפי שם כולל ה-extension.jar והספרייה המכילה קבצי .class. כל קבצי JAR בספריות שצוינו נטענים.

המנגנון יאסוף את כל קבצי ה-.jar מספריית הסיומת גם אם לקובץ אין סיומת jar. היישום של זה הוא שאם אפשר לשנות את השם של jar הממוקם בספריית classpath כדי שתהיה לו סיומת אחרת מאשר jar. התו הכללי (*) לא קולט אותו. טכניקה זו לא תעבוד עם ספריית ההרחבות.

בואו נבין את תהליך הביצוע באמצעות דוגמה.

A.java

 public class A { public String toString() { return 'hello'; } } 

B.java

 public class B { public static void main(final String[] args) { System.out.println(new A()); } } 

הידור של קובץ A.java. נאחסן את קובץ ה-A.class המקומפל לתוך A.jar. הצב את קובץ ה-JAR הזה בספרייה אחרת מאשר קובץ ה-B.class המהודר.

כדי להדגים את השימוש ב-classpath, אנו מניחים את קובץ A.jar בספרייה C:JavaPrograms ונקבל גישה ל-JAR הזה דרך תו כללי (*) לשימוש B.

מצאנו ש-B עדיין יכול לטעון את A.class בזמן שמחקנו אותו מהספרייה הנוכחית. משגר Java חיפש במפורש עבור C:JavaProgram. כמו כן, ניתן לטעון את המחלקה ללא נוכחותה באותה ספרייה ומפרט כיתות מפורש.

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

מה יקרה אם נשנה את השם של A.jar ל-A.backup באותה ספרייה עם הפניה ל-CLASSPATH. נתקלנו ב-NoClassDefFoundError כאשר אנו עושים את אותו הדבר מכיוון של-CLASSPATH-reference אין את הסיומת jar.

לולאה מוגברת של java