Programmēšana

Java 127. padoms: skatiet JAR izpildi

Visu lietojumprogrammas klašu un resursu komplektu varat viegli iesaiņot Java arhīvā (JAR). Faktiski tas ir viens mērķis, lai būtu burku faili. Cits ir ļaut lietotājiem viegli izpildīt arhīvā saglabāto lietojumprogrammu. Kāpēc tad jar faili ir otrās klases pilsoņi Java Visumā - darbojas tikai kā arhīvi -, ja tie var būt pirmās klases, tieši blakus vietējiem izpildāmajiem failiem?

Lai izpildītu burka failu, varat izmantot

java

komandu

-jar

opcija. Piemēram, pieņemsim, ka jums ir darbināms burkas fails ar nosaukumu

myjar.jar

. Tā kā fails ir palaists, varat to izpildīt šādi:

java -jar myjar.jar

.

Alternatīvi, Java Runtime Environment (JRE), kad tā ir instalēta operētājsistēmā, piemēram, Microsoft Windows, saista jar failus ar JVM, lai jūs varētu tos dubultklikšķināt, lai palaistu programmu. Šiem JAR jābūt izpildāmiem.

Jautājums ir šāds: kā jūs varat padarīt JAR darbināmu?

Manifesta fails un ieraksts Main-Class

Vairumā JAR failu sauca

MANIFEST.MF

tiek saglabāts direktorijā ar nosaukumu

META-INF

. Šī faila iekšpusē sauca īpašu ierakstu

Galvenā klase

stāsta

java -jar

komandu, kuru klasi izpildīt.

Problēma ir tāda, ka jums pašam pareizi jāpievieno šis īpašais ieraksts manifesta failā - tam jāatrodas noteiktā vietā un tam jābūt noteiktam formātam. Tomēr dažiem no mums nepatīk konfigurācijas failu rediģēšana.

Ļaujiet API to izdarīt jūsu vietā

Kopš Java 1.2, pakete sauc java.util.jar ir ļāvis jums strādāt ar burku failiem. (Piezīme: Tas balstās uz java.util.zip .) Konkrēti, burkas pakete ļauj viegli manipulēt ar šo īpašo manifesta failu, izmantojot Manifests klasē.

Uzrakstīsim programmu, kas izmanto šo API. Pirmkārt, šai programmai jāzina par trim lietām:

  1. JAR mēs vēlamies padarīt skrienamu
  2. Galvenā klase, kuru mēs vēlamies izpildīt (šai klasei jābūt JAR iekšienē)
  3. Jauna JAR nosaukums mūsu izejai, jo mums nevajadzētu vienkārši pārrakstīt failus

Uzrakstiet programmu

Šis saraksts veidos mūsu programmas argumentus. Šajā brīdī izvēlēsimies piemērotu nosaukumu šai lietojumprogrammai. Kā MakeJarRunnable skaņa?

Pārbaudiet galvenos argumentus

Pieņemsim, ka mūsu galvenais ieejas punkts ir standarts galvenais (virkne []) metodi. Vispirms mums vajadzētu pārbaudīt programmas argumentus šeit:

 if (args.length! = 3) {System.out.println ("Lietojums: MakeJarRunnable" + ""); System.exit (0); } 

Lūdzu, pievērsiet uzmanību tam, kā tiek interpretēts argumentu saraksts, jo tas ir svarīgi šim kodam. Argumentu kārtība un saturs nav iecirsts akmenī; tomēr atcerieties atbilstoši modificēt citu kodu, ja tos maināt.

Piekļūstiet JAR un tā manifesta failam

Pirmkārt, mums ir jāizveido daži objekti, kas zina par JAR un manifestu failiem:

 // Izveidojiet objektu JarInputStream un iegūstiet tā manifestu JarInputStream jarIn = new JarInputStream (new FileInputStream (args [0])); Manifesta manifests = jarIn.getManifest (); if (manifest == null) {// Tas notiks, ja nav manifesta manifest = new Manifest (); } 

Iestatiet atribūtu Main-Class

Mēs ieliekam Galvenā klase ieraksts manifesta faila galveno atribūtu sadaļā. Kad mēs iegūstam šo atribūtu kopu no manifesta objekta, mēs varam iestatīt atbilstošo galveno klasi. Tomēr, ja nu a Galvenā klase atribūts jau pastāv sākotnējā JAR? Šī programma vienkārši izdrukā brīdinājumu un iziet. Varbūt mēs varētu pievienot komandrindas argumentu, kas liek programmai izmantot jauno vērtību iepriekš esošās vērtības vietā:

 Atribūti a = manifest.getMainAttributes (); String oldMainClass = a.putValue ("Main-Class", argumenti [1]); // Ja pastāv veca vērtība, pastāstiet lietotājam un izejiet, ja (oldMainClass! = Null) {System.out.println ("Brīdinājums: vecā Main-Class vērtība ir:" + oldMainClass); System.exit (1); } 

Ievadiet jauno JAR

Mums ir jāizveido jauns burkas fails, tāpēc mums jāizmanto JarOutputStream klasē. Piezīme. Mums jānodrošina, lai izvadīšanai neizmantotu to pašu failu, ko ievadei. Alternatīvi, iespējams, programmai vajadzētu apsvērt gadījumu, kad abi burku faili ir vienādi, un pamudināt lietotāju, ja viņš vēlas pārrakstīt oriģinālu. Tomēr es to rezervēju kā vingrinājumu lasītājam. Ieslēdziet kodu!

 System.out.println ("Rakstīšana uz" + args [2] + "..."); JarOutputStream jarOut = new JarOutputStream (jauns FileOutputStream (args [2]), manifests); 

Mums ir jāraksta visi ieraksti no ievades JAR līdz izejas JAR, tāpēc atkārtojiet ierakstus:

 // Izveidojiet lasīšanas buferi, lai pārsūtītu datus no ievades baita [] buf = jauns baits [4096]; // Iterēt ierakstus JarEntry entry; while ((entry = jarIn.getNextJarEntry ())! = null) {// Izslēdziet manifesta failu no vecā JAR, ja ("META-INF / MANIFEST.MF" .equals (entry.getName ())) turpinās; // Ierakstiet ierakstu izvadē JAR jarOut.putNextEntry (ieraksts); int lasīt; while ((lasīt = jarIn.read (buf))! = -1) {jarOut.write (buf, 0, lasīt); } jarOut.closeEntry (); } // Noskalojiet un aizveriet visas straumes jarOut.flush (); jarOut.close (); jarIn.close (); 

Pabeigt programmu

Protams, šis kods mums jāievieto a galvenais metodi klasē un ar piemērotu importa pārskatu kopu. Resursu sadaļā sniegta visa programma.

Lietojuma piemērs

Paliksim šo programmu izmantot ar piemēru. Pieņemsim, ka jums ir programma, kuras galvenais ieejas punkts ir klasē ar nosaukumu HelloRunnableWorld. (Šis ir pilns klases nosaukums.) Pieņemsim arī, ka esat izveidojis JAR ar nosaukumu myjar.jar, kas satur visu lietojumprogrammu. Palaist MakeJarRunnable uz šī burka faila šādi:

 java MakeJarRunnable myjar.jar HelloRunnableWorld myjar_r.jar 

Atkal, kā minēts iepriekš, ievērojiet, kā es pasūtu argumentu sarakstu. Ja aizmirstat pasūtījumu, vienkārši palaidiet šo programmu bez argumentiem, un tā atbildēs ar lietošanas ziņojumu.

Mēģiniet palaist

java -jar

komandu

myjar.jar

un tad tālāk

myjar_r.jar

. Ievērojiet atšķirību! Kad esat to izdarījis, izpētiet manifesta failus (

META-INF / MANIFEST.MF

) katrā JAR. (Abus JAR var atrast

avota kods

.)

Šeit ir ieteikums: mēģiniet izveidot MakeJarRunnable programma par skrienamu JAR!

Skrien ar to

Palaist JAR, veicot dubultklikšķi uz tā vai izmantojot vienkāršu komandu, vienmēr ir ērtāk nekā to iekļaut savā klases ceļā un palaist noteiktu galveno klasi. Lai palīdzētu jums to izdarīt, JAR specifikācijā ir paredzēts Galvenā klase JAR manifesta faila atribūts. Šeit piedāvātā programma ļauj jums izmantot Java JAR API, lai viegli manipulētu ar šo atribūtu un padarītu jūsu JAR darbināmus.

Šons Silvermans šobrīd ir Kanādas Manitobas universitātes elektrotehnikas un datortehnikas katedras aspirants. Viņš sāka strādāt ar Java 1996. gada vidū un kopš tā laika to izmanto gandrīz tikai. Viņa pašreizējās intereses ir elektrisko lauku un šķidrumu simulācija, kļūdu labošanas kodi un izveicīgu GUI (grafiskā lietotāja saskarne) triku ieviešana. Šons savas universitātes datortehnikas nodaļā pasniedz arī trešā gada programmatūras projektēšanas kursu.

Uzziniet vairāk par šo tēmu

  • Lejupielādējiet šī padoma avota kodu un JAR

    //images.techhive.com/downloads/idge/imported/article/jvw/2002/05/makejarrunnable.zip

  • "Java Tip 120Execute Self-Extracting JARs", Z. Stīvs Džins un Džons D. Mičels (JavaWorld, 2001. gada novembris)

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

  • JAR faila specifikācija

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

  • burka - Java arhīva rīks

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

  • Skatīt visu iepriekšējo Java padomi un iesniedziet savu

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

  • Uzziniet Java no paša sākuma JavaWorld 's Java 101 kolonna

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

  • Java eksperti atbild uz jūsu visgrūtākajiem Java jautājumiem JavaWorld 's Java jautājumi un atbildes kolonna

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

  • Pārlūkot Java kodols sadaļa JavaWorld 's Aktuālais rādītājs

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

  • Palieciet uz augšu mūsu Tips 'N triki abonējot JavaWorld 's bezmaksas iknedēļas e-pasta biļeteni

    //www.javaworld.com/subscribe

  • Uzziniet klienta Java pamatus JavaWorld 's Java iesācējs diskusija. Galvenās tēmas ir Java valoda, Java virtuālā mašīna, API un izstrādes rīki

    //forums.idg.net/webx?50@@.ee6b804

  • Jūs atradīsit daudz ar IT saistītu rakstu no mūsu māsas publikācijām vietnē .net

Šo stāstu “Java Tip 127: See JAR run” sākotnēji publicēja JavaWorld.

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