טיפ ג'אווה 120: בצע JARs לחילוץ עצמי

במשך שנים רבות, יצירת הארכיון של פיל כץ, zip, הייתה אחד הפורמטים הפופולאריים ביותר לארכיון קבצים. סאן אימצה את פורמט ה- zip כבסיס לארכיון Java (JAR). Sun הרחיבה את השימוש בפורמט ה- zip עם מוסכמות שונות, כך שתוכל לארוז שיעורי Java בקובץ ארכיון. עם תוספת קובץ המניפסט JAR , זמן הריצה של Java יכול לאתר ולבצע ישירות את המחלקה הראשית של יישום Java הכלול בקובץ ה- jar.

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

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

יצירת קובץ הצנצנת לחילוץ עצמי היא פשוטה. אתה רק צריך קובץ מניפסט מיוחד של JAR, תוכנית חילוץ מבוססת Java, קובץ ה- zip או הצנצנת המכיל את קבצי התוכן הבסיסיים וכל jarיישום השירות של Java SDK .

קובץ המניפסט

כדי להפוך JARs הפעלה, אתה ראשון צריך קובץ מניפסט בשם MANIFEST.MFשל META-INFהמדריך. קובץ המניפסט עשוי להכיל מספר ערכים אפשריים; עם זאת, למטרותינו כאן, עלינו רק לציין את שם מחלקת Java המכילה את main()שיטת תוכנית החילוץ מבוססת Java :

מחלקה ראשית: ZipSelfExtractor 

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

המחלץ

אתה יכול לעשות את תוכנית חילוץ באמצעות גישות שונות. הגישה שאנו מציגים כאן היא פשוטה וישרה. ראשית, תוכנית החילוץ מגלה את שם קובץ הצנצנת החילוץ העצמי. עם שם זה ביד, המחלץ משתמש בספריות ה- zip / jar של Java המובנות הסטנדרטיות כדי לחלץ את קבצי התוכן מהארכיון. ניתן למצוא את קוד המקור המלא של ZipSelfExtractorב ZipSelfExtractor.java.

קבלת שם הקובץ של הצנצנת בתוכנית החילוץ יכולה להיות קשה. למרות ששם קובץ הצנצנת מופיע בשורת הפקודה, שם זה לא מועבר לשיטת הכיתה main(). לכן, בתוכנית החילוץ אנו משתמשים בקוד הבא כדי לחלץ את המידע מכתובת ה- URL שמפנה אל המחלץ:

מחרוזת פרטית getJarFileName () {myClassName = this.getClass (). getName () + ".class"; URL urlJar = this.getClass (). GetClassLoader (). GetSystemResource (myClassName); מחרוזת urlStr = urlJar.toString (); int from = "jar: file:". אורך (); int to = urlStr.indexOf ("! /"); החזר urlStr.substring (מ, ל); }

שימו לב getSystemResource()שבשיטה שאנחנו מעבירים myClassNameבמקום ZipSelfExtractor.class. זה מאפשר לנו לשנות את שם תוכנית החילוץ מבלי לשנות את החלק הזה בקוד. קבענו על myClassNameידי חיפוש של שם הכיתה הנוכחי.

לאחר מכן, אנו מחלצים את שם קובץ הצנצנת. ראשית, אנו מבקשים כתובת URL לקובץ המחלקה המכיל את המחלקה הפועלת כעת (שהיא תוכנית החילוץ). ברגע שיש לנו את כתובת ה- URL, נוכל לחטוף את שם קובץ הצנצנת. בהגדרה, כתובת ה- URL של תוכנית חילוץ JAR מתאימה לפורמט הבסיסי:

  1. jar:, שמראה שההפעלה פועלת מתוך קובץ צנצנת
  2. כתובת ה- URL של קובץ הצנצנת, כמו file:/C:/temp/test.jar, ואחריה !התו
  3. שם הנתיב הפנימי של הקובץ בתוך ה- JAR, כגון /ZipSelfExtractor.class

במקרה של תוכנית חילוץ, כתובת האתר עשויה להיראות כך:

jar: file: /home/johnm/test/zipper.jar! /ZipSelfExtractor.class 

עכשיו שיש לנו את שם קובץ הצנצנת, אנחנו יכולים לבצע את החילוץ. האומץ של תוכנית החילוץ מסתמך על ספריות המניפולציה של קבצי ה- zip / jar המובנים ב- Java כדי לבטל את דחיסת קבצי התוכן הכלולים בארכיון. ראה משאבים למידע נוסף על ספריות מניפולציה לקבצים zip / jar.

לנוחות השימוש, המחלץ הוא יישום Java גרפי. היישום משתמש JFileChooserבכיתה כדי לאפשר למשתמשים לציין את ספריית היעד אליה הם רוצים לחלץ את הקבצים. A ProgressMonitorמראה את התקדמות תהליך החילוץ. אם קובץ עלול להחליף קובץ קיים, המשתמש מתבקש להחליף את הקובץ הקיים או לא. לסיום, תיבת דו-שיח סטנדרטית מציגה סטטיסטיקה של חילוץ.

לבסוף, תוכנית החילוץ בודקת שהיא לא מחלצת את הקבצים שהופכים את קובץ ה- jar לחילוץ עצמי - קובץ המניפסט וקובץ המחלץ .class; התוכנית צריכה פשוט לחלץ את תוכן ה- JAR המקורי. שני הקבצים האלה הם חפצים של קובץ הצנצנת החילוץ העצמי ולא חלק מקבצי התוכן הבסיסיים המקוריים.

אריזת קובץ הצנצנת

כעת, כשיש לנו את קובץ המניפסט ואת תוכנית החילוץ, אנו יכולים לבנות את קובץ הצנצנת החילוץ העצמי. אנו יכולים להשתמש באופן ידני בכלי jarהשירות של JDK כדי ליצור קובץ צנצנת לחילוץ עצמי. לדוגמה, בהנחה שיש לך קובץ zip הנקרא myzip.zip, אתה יכול לבצע את השלבים הבאים כדי ליצור ממנו קובץ חילוץ עצמי:

  1. cd לספרייה המכילה myzip.zip
  2. הורד zipper.jar
  3. חלץ את הקבצים לספריה הנוכחית. הפכנו את זה ל- JAR שחולץ את עצמו:
    java -jar zipper.jar 
  4. העתק את zipper.classהקובץ אלZipSelfExtractor.class
  5. שנה שם myzip.zipל-myzip.jar
  6. עדכן myzip.jarעם jarmanifestו- ZipSelfExtractor.classקבצים:
    צנצנת uvfm myzip.jar jarmanifest ZipSelfExtractor.class 

עכשיו myzip.jarהוא חילוץ עצמי בכל הפלטפורמות המכילות Java Runtime Environment (JRE) 1.2 ואילך. להפעלת קובץ הצנצנת החילוץ העצמי, הפעל:

java -jar myzip.jar 

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

תרגיל לקורא

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

שחרר את היד שלך מה- JAR

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

במקום ליצור ידנית את קובץ הצנצנת החילוץ העצמי, עיין ב- ZipAnywhere. ZipAnywhere הוא כלי מלא zip/ תכליתי jarשנכתב ב- Java טהור ב 100%. זהו כלי מבוסס GUI בחינם a la WinZip ויכול ליצור קבצי צנצנות לחילוץ עצמי בלחיצת כפתור.

ד"ר זונה סטיב ג'ין הוא מהנדס תוכנה לצוות בחברת Rational Software ומחבר ZipAnywhere. ג'ון ד 'מיטשל הוא העורך התורם של העמודה N Tricks של JavaWorld. ג'ון הוא גם המייסד והארכיטקט הראשי של Non, Inc., שיטת ייעוץ טכנולוגית לניהול סיכונים עסקיים.

למידע נוסף על נושא זה

  • הורד את קבצי המקור לטיפ זה

    //www.javaworld.com/javaworld/javatips/javatip120/zipper.jar

  • "Java Tip 49How to Extract Java Resources from JAR and Zip Archives," John D. Mitchell and Arthur Choi (JavaWorld)

    //www.javaworld.com/javaworld/javatips/jw-javatip49.html

  • "Java Tip 70Create Objects from Jar Files!" John D. Mitchell (JavaWorld)

    //www.javaworld.com/javaworld/javatips/jw-javatip70.html

  • Jar File Specification

    //java.sun.com/j2se/1.3/docs/guide/jar/jar.html

  • JAR command line guide

    //java.sun.com/j2se/1.3/docs/tooldocs/win32/jar.html

  • ZipAnywhere, GUI-based self-extracting JAR creation tool

    //www.geocities.com/zipanywhere

  • View all previous Java Tips and submit your own

    //www.javaworld.com/javatips/jw-javatips.index.html

  • Learn Java from the ground up in JavaWorld's Java 101 column

    //www.javaworld.com/javaworld/topicalindex/jw-ti-java101.html

  • Java experts answer your toughest Java questions in JavaWorld's Java Q&A column

    //www.javaworld.com/javaworld/javaqa/javaqa-index.html

  • Browse articles by topic in JavaWorld's Topical Index

    //www.javaworld.com/channel_content/jw-topical-index.shtml

  • Speak out in our Java Forum

    //forums.idg.net/[email protected]@.ee6b802

  • Sign up for JavaWorld's free weekly email newsletters

    //www.idg.net/jw-subscribe

  • You'll find a wealth of IT-related articles from our sister publications at .net

סיפור זה, "טיפ ג'אווה 120: ביצוע JARs לחילוץ עצמי" פורסם במקור על ידי JavaWorld.