ניתוח פרמטרים של שורת הפקודה עם חברת התעופה

1. הקדמה

במדריך זה, נציג את חברת התעופה - ספריית ג'אווה מונעת ביאורים לבניית ממשקי שורת פקודה (CLI).

2. תרחיש

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

חברת התעופהמטרתו להפחית את קוד ה- boilerplate המשויך בדרך כלל ל- CLI ב- Java, שכן ניתן להשיג את ההתנהגויות הנפוצות ביותר באמצעות הערות וקוד משתמש אפס.

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

3. התקנה

כדי להתחיל, בואו נוסיף את התלות של חברת התעופה שלנו pom.xmאני:

 חברת תעופה com.github.rvesse 2.7.2 

4. CLI פשוט

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

@Cli (name = "baeldung-cli", תיאור = "הדרכה של חברת התעופה Baeldung", defaultCommand = Help.class) מעמד ציבורי CommandLine {ציבורי ריק ריק סטטי (מחרוזת [] טענות) {Cli cli = Cli חדש (CommandLine.class) ; Rmable cmd = cli.parse (args); cmd.run (); }}

דרך פשוט @ קלי הערה, הגדרנו את פקודת ברירת המחדל שתפעל ביישום שלנו - ה- עֶזרָה פקודה.

ה עֶזרָה class מגיע כחלק מספריית חברת התעופה וחושף פקודת עזרה המוגדרת כברירת מחדל באמצעות אוֹ -עֶזרָה אפשרויות.

בדיוק ככה, ההתקנה הבסיסית נעשית.

5. הפקודה הראשונה שלנו

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

@Command (name = "setup-log", תיאור = "הגדר את היומן שלנו") מחלקה ציבורית LoggingCommand מיישם Runnable {@Inject עזרה פרטית HelpOption; @Option (name = {"-v", "--verbose"}, תיאור = "הפעל / כבה את מילות המפתח ביומן") פרשנות בוליאנית פרטית = false; @ ביטול הפעלה בטלנית ציבורית () {אם (! Help.showHelpIfRequested ()) System.out.println ("מילוליות:" + מילולית); }}}

בואו נסתכל מקרוב על פקודת הדוגמה שלנו.

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

ואז הכרזנו א בוליאני מִשְׁתַנֶה, מִלוּלִי, והערתי את זה עם @אוֹפְּצִיָה לתת לו שם, תיאור, וגם כינוי -v / –מילה כדי לייצג את אפשרות שורת הפקודה שלנו לשלוט במילים.

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

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

@Cli (name = "baeldung-cli", תיאור = "מדריך חברת תעופה Baeldung", defaultCommand = Help.class, commands = {LoggingCommand.class, Help.class}) class public CommandLine {public static void main (String [] args ) {Cli cli = Cli חדש (CommandLine.class); Rmable cmd = cli.parse (args); cmd.run (); }} 

עכשיו, אם נעבור setup-log -v לתוכנית שלנו, זה יפעיל את ההיגיון שלנו.

6. אילוצים ועוד

ראינו כיצד חברת התעופה מייצרת CLI ללא דופי, אבל ... יש עוד!

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

אנחנו הולכים ליצור DatabaseSetupCommand בכיתה, שתגיב ל setup-db פקודה; אותו דבר כפי שעשינו קודם, אבל נוסיף קצת תבלין.

ראשית, נבקש את סוג מסד הנתונים, ונקבל רק 3 ערכים תקפים @ AllowRawValues:

@AllowedRawValues ​​(allowValues ​​= {"mysql", "postgresql", "mongodb"}) @Option (type = OptionType.COMMAND, name = {"-d", "--database"}, תיאור = "סוג RDBMS. ", title =" RDBMS סוג: mysql | postgresql | mongodb ") מוגן מחרוזת rdbmsMode;

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

@Option (type = OptionType.COMMAND, name = {"--rdbms: url", "--url"}, description = "URL לשימוש לחיבור ל- RDBMS.", Title = "URL של RDBMS") @MutuallyExclusiveWith ( תג = "מצב") @Pattern (תבנית = "^ (//.*) :( d *) (. *) u = (. *) & p = (. *)") מחרוזת מוגנת rdbmsUrl = ""; @Option (type = OptionType.COMMAND, name = {"--rdbms: host", "--host"}, description = "מארח לשימוש לחיבור ל- RDBMS.", Title = "מארח RDBMS") @MutuallyExclusiveWith ( tag = "mode") מוגן מחרוזת rdbmsHost = ""; 

שים לב שהשתמשנו ב- @תבנית decorator, שעוזר לנו להגדיר את פורמט מחרוזת ה- URL.

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

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

@RequiredOnlyIf (names = {"- rdbms: host", "--host"}) @Option (type = OptionType.COMMAND, name = {"--rdbms: user", "-u", "--user "}, תיאור =" משתמש להתחברות ל- RDBMS. ", title =" משתמש RDBMS ") מוגן מחרוזת rdbmsUser; @RequiredOnlyIf (names = {"- rdbms: host", "--host"}) @ Option (type = OptionType.COMMAND, name = {"--rdbms: password", "--password"}, תיאור = "סיסמה להתחברות ל- RDBMS.", Title = "סיסמת RDBMS") מוגנת מחרוזת rdbmsPassword; 

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

@Option (type = OptionType.COMMAND, name = {"--driver", "--jars"}, description = "רשימת מנהלי התקנים", title = "--driver --driver") צנצנות רשימה מוגנות = ArrayList חדש ();

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

7. לרוץ

עשינו זאת! סיימנו את הפרויקט שלנו ועכשיו נוכל להריץ אותו.

כצפוי, מבלי להעביר פרמטרים כלשהם, עֶזרָה מופעל:

שימוש $ baeldung-cli: baeldung-cli [] הפקודות הן: עזרה הצגת מידע עזרה setup-db הגדרת מסד הנתונים שלנו setup-log הגדרת היומן שלנו ראה 'baeldung-cli עזרה' למידע נוסף על פקודה ספציפית.

אם במקום זאת נבצע setup-log - עזרה, אנחנו מקבלים:

$ baeldung-cli setup-log --help NAME baeldung-cli setup-log - הגדר את היומן שלנו SYNOPSIS baeldung-cli setup-log [-h] [-v] אפשרויות -h, --help הצגת מידע עזרה -v, - -verbose הפעל / כבה את הפירוט של היומן

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

8. מסקנה

במאמר זה בנינו ממשק שורת פקודה פשוט אך חזק עם מעט מאוד קידוד.

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

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


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