קומפילציה של Java * .class קבצים עם javac

1. סקירה כללית

הדרכה זו תציג את ג'אוואק הכלי ומתאר כיצד להשתמש בו כדי לאסוף קבצי מקור Java לקבצי מחלקה.

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

2. ה ג'אוואק פקודה

אנו יכולים לציין אפשרויות וקבצי מקור בעת ביצוע ה- ג'אוואק כְּלִי:

javac [אפשרויות] [קבצי מקור]

איפה [אפשרויות] מציין את האפשרויות השולטות בפעולות של הכלי, ו- [קבצי המקור] מציין קובץ מקור אחד או יותר שיש להרכיב.

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

אפשרויות של ג'אוואק מסווגים לשלוש קבוצות: סטנדרטי, אוסף צולב ותוספת. במאמר זה נתמקד באפשרויות הסטנדרטיות והאקסטרה.

אפשרויות ההידור הצולבי משמשות למקרה השימוש הנפוץ יותר של הגדרת סוגים של הגדרות מול יישום JVM שונה מסביבת המהדר ולא יטופלו.

3. הקלד הגדרה

נתחיל בהצגת הכיתה בה נשתמש כדי להדגים את ג'אוואק אפשרויות:

נתונים בכיתה ציבורית {List textList = ArrayList new (); חלל ציבורי addText (טקסט מחרוזת) {textList.add (טקסט); } רשימת ציבורים getTextList () {להחזיר this.textList; }}

קוד המקור ממוקם בקובץ com / baeldung / javac / Data.java.

שים לב שאנחנו משתמשים במפרידי קבצים * nix במאמר זה; במכונות Windows, עלינו להשתמש במלוכסן האחורי ('\') במקום קו נטוי קדימה ('/').

4. אפשרויות סטנדרטיות

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

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

javac -d javac-target com / baeldung / javac / Data.java

ה ג'אוואק המהדר ייצור את קובץ המחלקה javac-target / com / baeldung / javac / Data.class. שים לב שבמערכות מסוימות, ג'אוואק אינו יוצר באופן אוטומטי את ספריית היעד, כלומר javac-target במקרה הזה. לכן, ייתכן שנצטרך לעשות זאת באופן ידני.

להלן מספר אפשרויות אחרות הנפוצות:

  • -cp (אוֹ מסלול קלאסי, –נתיב-שביל) – מציין היכן ניתן למצוא סוגים הנדרשים להרכבת קבצי המקור שלנו. אם אפשרות זו חסרה וה- CLASSPATH משתנה הסביבה אינו מוגדר, במקום זאת נעשה שימוש בספריית העבודה הנוכחית (כפי שהיה בדוגמה לעיל).
  • -p (אוֹ –מודול-נתיב) – מציין את המיקום של מודולי היישום הדרושים. אפשרות זו חלה רק על Java 9 ומעלה - עיין במדריך זה לקבלת מדריך למערכת המודולים Java 9.

אם אנו רוצים לדעת מה קורה במהלך תהליך אוסף, למשל. אילו כיתות נטענות ואילו נערכים, נוכל ליישם את -מִלוּלִי אוֹפְּצִיָה.

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

כאשר ג'אוואק פקודה נתקלת בוויכוח החל מ- '@, הוא מפרש את התווים הבאים כנתיב לקובץ ומרחיב את תוכן הקובץ לרשימת ארגומנטים. ניתן להשתמש ברווחים ותווים חדשים כדי להפריד בין ארגומנטים הכלולים בקובץ ארגומנט כזה.

נניח שיש לנו שני קבצים בשם אפשרויות, ו סוגים, בתוך ה javac-args ספריה עם התוכן הבא:

ה אפשרויות קוֹבֶץ:

-d javac-target -verbose

ה סוגים קוֹבֶץ:

com / baeldung / javac / Data.java

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

javac @ javac-args / options @ javac-args / types

במקום לשמור ויכוחים בקבצים נפרדים, אנו יכולים גם לאחסן את כולם בקובץ יחיד.

נניח שיש קובץ בשם טיעונים בתוך ה javac-args מַדרִיך:

-d javac-target -verbose com / baeldung / javac / Data.java

בואו נאכיל את הקובץ הזה ג'אוואק כדי להשיג את אותה התוצאה כמו עם שני הקבצים הנפרדים לפני כן:

javac @ javac-args / טיעונים

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

5. אפשרויות נוספות

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

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

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

  • -קסלינט - מפעיל את כל האזהרות המומלצות
  • -קסלינט: מפתח [, מפתח] * - מאפשר אזהרות ספציפיות

הנה כמה מהידיים -קסלינט מקשים:

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

כעת, צור קובץ בשם xlint-ops בתוך ה javac-args ספריה עם התוכן הבא:

-d javac-target -Xlint: סוגי גלם, com לא מסומן / baeldung / javac / Data.java

בעת הפעלת פקודה זו:

javac @ javac-args / xlint-ops

אנחנו צריכים לראות את סוגי גלם ו לא בדוק אזהרות:

com / baeldung / javac / Data.java: 7: אזהרה: [rawtypes] נמצא סוג גלם: ArrayList List textList = ArrayList חדש (); ^ חסרים ארגומנטים מסוג למחלקה הגנרית ArrayList כאשר E הוא משתנה מסוג: E מרחיב אובייקט שהוכרז בכיתה ArrayList com / baeldung / javac / Data.java: 7: אזהרה: [לא מסומן] המרה לא מסומנת רשימת textList = ArrayList חדש (); ^ חובה: נמצאה רשימה: ArrayList ...

6. מסקנה

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

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

כמו תמיד, ניתן למצוא את קוד המקור למדריך זה ב- GitHub.