Užitečné tipy

Montáž *

Pin
Send
Share
Send
Send


V obou případech (IDE nebo utility jar) v archivu bude vytvořen soubor MANIFEST.MF. Jak jsem již napsal, má smysl číst o dalších vlastnostech souborů JAR. Protože všechno je v dokumentaci psáno velmi dobře, nebudu se zabývat překladem. Pojďme tedy přejít k dalšímu bodu naší cesty prostřednictvím souborů JAR.

Příkazový řádek

Řekl jsem tedy, že hlavní funkcí JAR je obsahovat soubor tříd jako soubory tříd. Nyní musíme pochopit, jak připojit soubory JAR ke třídě run, aby mohla třída run používat třídy ze souboru JAR.
Jak již dobře víte, spuštění Java programu zahrnuje spuštění JVM (pro Windows je to soubor java.exe, pro Unix java) a předání názvu příkazového řádku třídy, kterou chcete spustit. Například pro spuštění třídy První v balíčku edu.javacourse.test nutné v adresáři, ve kterém je adresář umístěn edu / javacourse / test zadejte následující příkaz:

Jak vidíte, jako argument jsme předali celé jméno třídy, kterou chceme spustit. Kromě názvu třídy přijímá JVM poměrně málo parametrů, které umožňují konfigurovat určité vlastnosti JVM. V tomto článku budeme analyzovat velmi důležitý prvek - CLASSPATH - který se používá k připojení souborů JAR.
Nyní projdeme celý cyklus vytváření souboru JAR a jeho připojení bez použití IDE - jsem velmi citlivý na schopnost programátora používat příkazový řádek. Zaprvé to ukazuje, že opravdu chápete podstatu, a za druhé, tato dovednost je prostě velmi užitečná. Například ve stejném Unixu / Linuxu je velmi velké množství práce na příkazovém řádku mnohem pohodlnější a některé produkty obsahují nástroje, které lze spustit z příkazového řádku. Pojďme k tomu.
Vytvořte adresář Javaesson (v zásadě jsme ji již vytvořili v sekci Základní kroky. V tomto adresáři vytvoříme strukturu adresářů Jarlib / edu / javacourse / jar. Pomocí textového editoru vytvořte soubor SayHello.java

Naše adresářová struktura by měla vypadat takto:

Nyní je čas na příkazový řádek. Spustíme příkaz cmd (pokud si nepamatujete - podíváme se do sekce Základní kroky). Přejděte do adresáře JavaLesson / JarLib a v něm nejprve sestavíme náš soubor SayHello.java takový tým

Po úspěšné kompilaci vytvořte soubor JAR pomocí příkazu

Pokud pro vás všechno vyšlo, pak v katalogu JavaLesson / JarLib měl by se zobrazit soubor say.jar.
Nyní napíšeme malou třídu, kterou naše třída použije Sayhello. DŮLEŽITÉ Pro „čistotu experimentu“ vytvořte tuto třídu v adresáři Javaesson. Navrhuji vytvořit třídu bez použití balíčků (ačkoli by to nemělo být pravidlo - v reálných projektech nemusíte vytvářet třídy bez balíčků). Zde je náš soubor PoužijteHello.javakterý bude umístěn v adresáři Javaesson

Věnujte pozornost prvnímu řádku - do něj importujeme třídu Sayhello. Metodou hlavní vytváříme objekt a voláme jeho metodu. Naše adresářová struktura by měla vypadat takto:

Nyní musíme sestavit naši skvělou třídu. Zkusíme tým javac. POZOR Jsme v katalogu Javaesson.

A dostaneme chybu:

Zpráva v tomto případě je poměrně informativní - „UseHello.java:1: chyba: balíček edu.javacourse.jar neexistuje“ a „UseHello.java:6: chyba: nemůže najít symbol“. Nepřipojili jsme naši třídu Sayhello - kompilátor neví, odkud je získat a odkud takový balíček / třída pochází - edu.javacourse.jar.SayHello. Dobře - parafrázují klasiku - „Vaše slovo, soudruhu CLASSPATH.“
Je zřejmé, že musíme kompilátoru říct, že by měl používat nejen ty soubory JAR, které již má - stejné rt.jar - ale také náš soubor JAR. To se provádí pomocí speciální volby při spuštění kompilátoru.

V tomto příkazu jsme přidali řádek -cp JarLib / say.jar. Část -cp říká, že by měl následovat seznam souborů JAR, které obsahují potřebné třídy. Seznam může obsahovat několik souborů oddělených „,“ pro Windows a „:“ pro Unix / Linux. Například pokud potřebuji určit dva soubory - say1.jar a say2.jar - umístěné v adresáři C: / Anton / Knihovny, pak by příkaz (pro Windows) vypadal takto:

Mimochodem, „-cp“ je zkratka pro třídní cesta - Dříve bylo nutné psát tímto způsobem a nyní je to také možné.

Je také důležité si uvědomit, že do CLASSPATH můžete zahrnout nejen soubory JAR - můžete sem přidat cestu k adresáři se soubory .class (opět je možné uvést několik z nich). Pokud bychom nevytvořili soubor JAR say.jar, ale použil kompilovaný soubor SayHello.class z katalogu Jarlib, pak by příkaz vypadal takto:

Můžete se zeptat - proč jsme uvedli cestu pouze k Jarlib, ale ne celý adresář se souborem SayHello.class. Faktem je, protože Protože náš soubor je obsažen v balíčku, musíme zadat cestu k balíčku a je v adresáři Jarlib. Můžete zadat úplnou (spíše než relativní) cestu - takto:

No, podařilo se nám zkompilovat, je čas spustit naši skvělou třídu. Pravděpodobně už víte, že při spuštění musíme také určit náš soubor say.jar a tým by měl vypadat něco takového. POZOR Jsme v katalogu Javaesson.

Ale při spuštění tohoto programu selháme. Toto je zpráva, kterou JVM produkuje:

JVM nemůže najít naši třídu. Jak je to tady, přímo v tomto adresáři? Trik je v tom, že když na příkazovém řádku zadáte CLASSPATH, JVM vezme třídy POUZE z těchto souborů / adresářů. A náš třídní spis Usehello nachází se v adresáři CURRENT, který není specifikován. Tady je taková epidemie. Musíme pověřit JVM, aby také odebral soubory z aktuálního adresáře. Děje se to takto - v CLASSPATH musíte zadat symbol „.“. Toto bude aktuální adresář. Náš tým by měl vypadat takto:

No - teď by se mělo vše podařit a uvidíme nápis HELLO.
Zaměření na CLASSPATH na vás může hrát docela trik. Skutečnost je taková, že JVM používá proměnnou prostředí zvanou CLASSPATH. Pro Windows je nastaven stejným způsobem jako proměnné PATH a JAVA_HOME - udělali jsme to v sekci Instalace JDK. Tato proměnná určuje sadu souborů JAR a adresářů, které bude JVM používat, pokud při spuštění programu NEZARADÍTE CLASSPATH.
Některé programy vytvářejí (nebo aktualizují) proměnnou prostředí CLASSPATH během instalace a nemusí vám nic říkat. A tak začnete svou třídu z příkazového řádku a JVM ji NEVIDUJE. Proč? že dpzkf proměnnou "CLASSPATH" a nemá symbol ".". V tomto případě se to, co jsme již viděli, stane - soubory z aktuálního adresáře se nenačtou. Takže buďte opatrní.

Připojte JAR v NetBeans IDE

Protože V tomto kurzu používám NetBeans k prokázání, pravděpodobně nebude správné neukazovat, jak povolit JAR v tomto prostředí. Jak jsem zmínil, pokud je čas na další IDE, zapíšu je do stejného článku. Ale nemyslím si, že to bude v blízké budoucnosti.
Pokud se podíváte na servisní okno „Projekty“, které je obvykle umístěno vlevo, uvidíte v něm strukturu projektu, která obsahuje sekci „Knihovny“. Vytvořil jsem dva projekty Sayhello a Usehello

V otevřeném souboru PoužijteHello.java úplně první řádek ukazuje, že kompilátor v něm vyvolá chybu - jak již víme, znamená to, že neexistuje požadovaná třída. V zásadě vám IDE umožňují připojit nejen hotové soubory JAR, ale také projekty, ale tuto funkci nebudeme používat (v tomto případě konkrétně). Pro připojení knihovny z projektu Sayhello Nejprve musíme tento projekt sestavit prostřednictvím týmu Build. Výsledek můžeme vidět v katalogu dist. V něm můžeme vidět soubor SayHello.jar. Předvídání otázky - můžete změnit název souboru - abyste soubor vytvořili pod jiným názvem, musíte opravit konfigurační soubor nbproject / project.properties. Najděte v něm možnost se jménem dist.jar A změňte název souboru. Obecně není příliš pohodlné. Takže obvykle ne.
Nyní musíme připojit hotový soubor JAR k našemu druhému projektu Usehello. Existuje několik způsobů, jak toho dosáhnout.

  1. Klepněte pravým tlačítkem myši na položku „Knihovny“ ve struktuře projektu a vyberte v ní „Přidat JAR / složku“. Po výběru souboru je soubor zobrazen ve větvi „Knihovny“
  2. Klikněte pravým tlačítkem na projekt Usehello v okně „Projekty“ a v rozbalovací nabídce vyberte položku (obvykle nejnižší) „Vlastnosti“. V otevřeném dialogovém okně vyberte vlevo „Knihovny“ a použijte tlačítko „Přidat JAR / složku“ na kartě „Kompilovat“.


Navrhuji také podívat se na kartu „Spustit“. V něm můžete vidět, že při spuštění budou připojeny ty knihovny, které jsou připojeny při kompilaci zdrojů („Classpath for Compiling Source“).

Můžete to zaokrouhlit, i když samozřejmě proces učení je nekonečný a pravděpodobně najdete spoustu zajímavých informací o použití a tvorbě jar-souborů.

Zdrojový kód pro projekty NetBeans si můžete stáhnout zde. Knihovna v nich musí být připojena samostatně. Takže můžete trénovat. Hodně štěstí.

A nyní nás čeká další článek: Multithreading - první kroky.

Základy Java

30.11.2008 01:47 dop

Hrají:
NetBeans - IDEE, 32-bit Vista - Axis, JFrame - program, který pracuje ze zásobníku, SE - programátor.

Zadání:
zkuste získat vyhledávaný soubor * .jre z NetBeans, pokud existuje hotový kód, bajtový kód ve třídách.

Předmluva: Nikdy jsem nezkompiloval program rukama - pořád v AyDEE. VUT NetBeans vytvoří soubor * .jre pouze pro hlavní soubor .java.

Četl jsem to, ale je stále těžké se zkušenostmi vidět - články, které potřebuji, nejsou sugestivní.

Zobrazit alespoň tam, kde konkrétní příkazy říkají, jak vytvořit soubor * .jre z DOSu.

HLAVNÍ ÚLOHA: program by měl být spuštěn dvojitým kliknutím myši a ne z IDEA (toto je HLAVNÍ PROBLÉM).

Nesuďte přísně

Upraveno: 30. listopadu 2008 12:31
30.11.2008 2:53 a.m.

Proč jre? Možná sklenici?

V NetBeans musíte vybrat projekt Build a jste hotovi - řekne vám, kde hledat váš archiv.

VUT NetBeans vytvoří soubor * .jre pouze pro hlavní soubor .java.

Pokud je to stále o JAR, pak je to jen archiv. Ve Windows se to právě tak začíná. Dvakrát klikněte. Maximum - vytvořte přezdívku netopýra.

30.11.2008 2:17 hodin

jar je pravidelný ZIP archiv. Jedinou funkcí je přítomnost složky META-INF. V této složce mohou být navíc přítomny další soubory, které lze číst v různých výukových programech. Použití souborů JAR: Základy, Přehled souborů Jar, Lekce: Balicí programy do souborů JAR.

Krátký stisk:
vytvořit jar jar cf vstupní soubor (y) jar
vytvořte jar s vaším souborem manifestu jar cmf manifest-jar file file (s)

Když je soubor jar spuštěn dvojitým kliknutím, je skutečně proveden příkaz java -jar jar-file. Aby tento příkaz fungoval, musí být v manifestu uvedena počáteční třída:

Pokud je pro práci potřeba jiný soubor jar, musí být uvedeny v manifestu, protože ani použití argumentu příkazového řádku -jar a proměnné prostředí CLASSPATH a argumentu -cp (aka -classpath) nejsou ignorovány:

Samotné přidružení udávající, jak by měl být soubor jar spuštěn, je v registru. Toto téma bylo na fóru mnohokrát diskutováno. Při instalaci JRE nebo JDK je toto přidružení zaregistrováno automaticky, takže jej nemusíte dělat sami.

Ve skutečnosti je lepší delegovat shromáždění na něco jako mravenec nebo maven - dělat to pokaždé rukama, je nadstandardní práce PMSM.

30.11.2008 14:39 p.m.

Ano, opravdu. Potřebujete soubor JAR.
Když spustím pro projekt "build main project (F11)", vytvoří se pro hlavní třídu (Main.java) soubor JAR.

struktura samotného souboru .java je
Projekt-> balíček-> Main.java

Může být lepší vytvořit projekt bez balíčku s názvem mého souboru .java. Pokusím se napsat hrnec.

A na otázku vytvoření přezdívky netopýra: jak ji sestavit?

30.11.2008 14:47 p.m.
30.11.2008 3:17 hodin

Nyní je otázkou:
při spuštění "cmd.exe" je označena počáteční cesta: "C: Windows system32"
k jízdě E stačilo zadat „e:“.

A co napsat do složky: "E: Java NetBeansExamples"?

30.11.2008 3:27 hodin
Upraveno: 1. prosince 2008 12:46 a.m.
30.11.2008 3:28 hodin

Nyní je otázkou:
při spuštění "cmd.exe" je označena počáteční cesta: "C: Windows system32"
k jízdě E stačilo zadat „e:“.

A co napsat do složky: "E: Java NetBeansExamples"?

30.11.2008 18:32

I nadále kopat, i když chápu, že lopata je stále malá.

nyní kvůli mému problému:
přesto vytvořil soubor jar (udělal to jak v adresáři, kde byl soubor .java, tak v kořenovém adresáři). V důsledku toho se objevil soubor, při jehož spuštění se objevil
Zpráva ze spouštěče Java Virtual Machine Launcher:
Nepodařilo se načíst atribut manifestu hlavní třídy z path filename.jar

Cítím mezery a problémy s CLASSPATH. Jaký adresář musíte zadat, aby se soubor .jar "rychle a správně" spustil?

Také již vím, že můžete použít netopýrový soubor ke spuštění aplikací virtuálně se strojem Java

A ještě jedna věc: musíte vytvořit archív jar ze souborů .java nebo ze tříd.

Něco, co jsem úplně zmatený, pravděpodobně potřebuji jíst :)

30.11.2008 10:36 hodin
30.11.2008 10:42 hodin

To říká. že v manifestu není žádný atribut Main-Class, který označuje třídu aplikace, která má být spuštěna. Měli byste vytvořit svůj soubor manifestu, zahrnout tam atribut a určit soubor manifestu s vytvořením jar.

bat spustit ze správce souborů je nejhorší volba. V každém případě se zobrazí okno konzoly. Pokud nenapíšete program konzoly. A je lepší projít lnk.

01.12.2008 11:27 dop

Zvuková intuice mi říká, že java soubory, ve kterých je zapsán bytecode pro tlumočníka. )

Jak povolím atribut Main-Class (syntaxe příkazu)?
. nebo je nutné určit soubor manifestu v souboru jar? Jak postupovat při vytváření jar-a?
A soubor manifestu bude také muset být uložen, aby se archív jar mohl spouštět vedle sebe, nebo jen někde na počítači? (No, to už je otázka obecného vývoje)

01.12.2008 12:23

Jakmile dokážete existenci takových souborů v přirozených podmínkách, souhlasím s vámi. Tip: v * .java je zdrojový kód programu čitelný člověkem uložen v * .class - strojově čitelném bajtovém kódu. Pro co tedy kompilovat * .java do * .class obecně, pokud je možné spustit kód přímo ze zdroje a la BASIC?

hovoří o vašem úplném nepochopení tématu.

01.12.2008 18:30 hodin

začněme od začátku.
existuje kód (nemá nic společného s podstatou)

který je v souboru: "E: Java Apps SE src test MyFFrame.java"
bytecode je v souboru: "E: Java Apps SE build classes test MyFFrame.class"
(k otázce hierarchie - pracuji s NetBeans)

Přes DOS přejděte do složky: "E: Java Apps SE build classes test" (konec konců, v souboru "MyFFrame.class" je náš bajtkód))
a zadejte příkaz (jak je uvedeno v http://java.sun.com/docs/books/tutorial/deployment/jar/build.html) "" jar cf MyApp.jar MyFFrame.class

dostaneme další soubor "MyApp.jar" v adresáři "E: Java Apps SE build classes test"

Poklepejte na vytvořený soubor jar a získejte zprávu od spouštěče Java Virtual Machine Launcher: Nepodařilo se načíst atribut manifestu hlavní třídy z E: Java Apps SE build classes test MyApp.jar
Problém je, že hlavní třída není zaregistrována v souboru "manifest.mf".

Jdeme do "MyApp.jar" jako v běžném archivu pomocí WinRAR3_42.exe
Složení archivu:
- složka „META-INF“ (uvnitř leží soubor „MANIFEST.MF“)
- soubor "MyFFrame.class"

Obsah souboru „MANIFEST.MF“:

Pravděpodobně by měl být do tohoto souboru přidán záznam uvádějící, že hlavní třída je "MyFFrame.class". Chcete-li to provést, otevřete cherished soubor "MANIFEST.MF" s úchyty (přes Poznámkový blok) a přidejte poslední řádek
nezapomeňte vložit jeden „Enter“ za poslední řádek (celkem za celý text by měly být 2 (dva) prázdné řádky).

Uložte soubor s kombinací kláves „Ctrl + S“. Zeptáme se: „Aktualizovat soubor v archivu?“ - klikneme na ANO!

Pin
Send
Share
Send
Send