Kompiliranje datoteka Java * .class s javac

1. Pregled

Ovaj tutorial će predstaviti javac alat i opisuje kako ga koristiti za kompajliranje Java izvornih datoteka u datoteke klase.

Počet ćemo s kratkim opisom javac naredbu, a zatim dublje proučite alat gledajući njegove razne mogućnosti.

2. The javac Naredba

Možemo odrediti opcije i izvorne datoteke prilikom izvršavanja datoteke javac alat:

javac [opcije] [izvorne datoteke]

Gdje [opcije] označava opcije kontrole rada alata i [izvorne datoteke] označava jednu ili više izvornih datoteka koje će se kompilirati.

Sve su opcije doista potpuno opcionalne. Izvorne datoteke mogu se izravno navesti kao argumenti za javac naredbu ili čuva u referenciranoj datoteci argumenata kako je kasnije opisano. Primijetite da bi izvorne datoteke trebale biti poredane u hijerarhiji direktorija koja odgovara potpuno kvalificiranim imenima vrsta koje sadrže.

Mogućnosti javac svrstani su u tri skupine: standardni, unakrsna kompilacija i dodatni. U ovom ćemo se članku usredotočiti na standardne i dodatne opcije.

Opcije unakrsne kompilacije koriste se za rjeđi slučaj sastavljanja definicija tipova protiv JVM implementacije koja se razlikuje od okruženja kompajlera i neće se rješavati.

3. Definicija tipa

Počnimo s uvođenjem klase koju ćemo koristiti za demonstraciju javac mogućnosti:

podaci javne klase {Popis textList = new ArrayList (); javna praznina addText (tekst niza) {textList.add (tekst); } javni popis getTextList () {return this.textList; }}

Izvorni kod se nalazi u datoteci com / baeldung / javac / Data.java.

Imajte na umu da u ovom članku koristimo * nix razdvajače datoteka; na Windows računalima moramo koristiti kosu crtu ('\') umjesto kose crte prema naprijed (‘/').

4. Standardne opcije

Jedna od najčešće korištenih standardnih opcija javac naredba je -d, specificiranje odredišnog direktorija za generirane datoteke klasa. Ako tip nije dio zadanog paketa, kreira se struktura direktorija koja odražava ime paketa kako bi zadržala datoteku klase te vrste.

Izvršimo sljedeću naredbu u direktoriju koji sadrži strukturu navedenu u prethodnom odjeljku:

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

The javac compiler će generirati datoteku klase javac-target / com / baeldung / javac / Data.class. Imajte na umu da na nekim sustavima, javac ne stvara automatski ciljni direktorij, što je javac-meta u ovom slučaju. Stoga ćemo to možda morati učiniti ručno.

Evo nekoliko drugih često korištenih opcija:

  • -cp (ili -razredna staza, –Razred-put) – određuje gdje se mogu naći tipovi potrebni za kompajliranje naših izvornih datoteka. Ako ova opcija nedostaje i KLASPAT varijabla okoline nije postavljena, umjesto nje koristi se trenutni radni direktorij (kao što je bio slučaj u gornjem primjeru).
  • -str (ili –Modul-put) – označava mjesto potrebnih aplikacijskih modula. Ova je opcija primjenjiva samo na Javu 9 i novije verzije - vodič za sustav Java modula potražite u ovom vodiču.

Ako želimo znati što se događa tijekom postupka kompilacije, na pr. koje su klase učitane, a koje kompajlirane, možemo primijeniti -verbozna opcija.

Posljednja standardna opcija koju ćemo pokriti je datoteka argumenata. Umjesto da argumente izravno prosljeđuje javac alat, možemo ih pohraniti u datoteke argumenata. Imena tih datoteka s prefiksom '@ znak, zatim se koriste kao naredbeni argumenti.

Kada javac naredba nailazi na argument koji započinje s '@, tumači sljedeće znakove kao put do datoteke i proširuje sadržaj datoteke u popis argumenata. Razmaci i znakovi novog retka mogu se koristiti za odvajanje argumenata koji su uključeni u takvu datoteku argumenata.

Pretpostavimo da imamo dvije datoteke s imenom mogućnosti, i vrste, u javac-args imenik sa sljedećim sadržajem:

The mogućnosti datoteka:

-d javac-meta -verbozna

The vrste datoteka:

com / baeldung / javac / Data.java

Možemo sastaviti Podaci upišite kao prije s detaljnim porukama ispisanim na konzoli izvršavanjem ove naredbe:

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

Umjesto da čuva argumente u zasebnim datotekama, također ih možemo pohraniti u jednu datoteku.

Pretpostavimo da postoji datoteka s imenom argumenti u javac-args imenik:

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

Uhranimo ovu datoteku u javac kako bi se postigao isti rezultat kao i prije s dvije zasebne datoteke:

javac @ javac-args / argument

Primijetite da su opcije koje smo prošli u ovom odjeljku samo najčešće. Potpuni popis standarda javac opcije, pogledajte ovu referencu.

5. Dodatne mogućnosti

Dodatne mogućnosti javac su nestandardne opcije koje su specifične za trenutnu implementaciju kompajlera i mogu se mijenjati u budućnosti. Kao takvi, nećemo detaljno prolaziti kroz ove opcije.

Međutim, postoji opcija koja je vrlo korisna i vrijedna spomena, -Xlint. Za cjeloviti opis drugog javac dodatne mogućnosti, slijedite ovaj link.

The -Xlint opcija omogućuje nam omogućavanje upozorenja tijekom kompilacije. Postoje dva načina za određivanje ove opcije u naredbenom retku:

  • -Xlint - pokreće sva preporučena upozorenja
  • -Xlint: tipka [, tipka] * - omogućuje određena upozorenja

Ovdje su neke od najprikladnijih -Xlint tipke:

  • sirovi tipovi - upozorava na upotrebu sirovih vrsta
  • neoznačeno - upozorava na neprovjerene operacije
  • statički - upozorava na pristup statičnom članu iz člana instance
  • glumačka postava - upozorava na nepotrebne odljeve
  • serijski - upozorava na serijske klase koje nemaju a serialversionUID
  • propasti - upozorava na propadanje kroz sklopka izjava

Sada stvorite datoteku s imenom xlint-ops u javac-args imenik sa sljedećim sadržajem:

-d javac-target -Xlint: sirovi tipovi, neprovjereno com / baeldung / javac / Data.java

Prilikom izvođenja ove naredbe:

javac @ javac-args / xlint-ops

trebali bismo vidjeti sirovi tipovi i neprovjereno upozorenja:

com / baeldung / javac / Data.java: 7: upozorenje: [rawtypes] pronađen sirovi tip: ArrayList Popis textList = novi ArrayList (); ^ nedostaju argumenti tipa za generičku klasu ArrayList gdje je E varijabla tipa: E proširuje Objekt deklariran u klasi ArrayList com / baeldung / javac / Data.java: 7: upozorenje: [neprovjereno] nepotvrđena lista pretvorbe textList = new ArrayList (); ^ obavezno: Popis pronađen: ArrayList ...

6. Zaključak

Ovaj je vodič prošao kroz javac alat koji pokazuje kako koristiti opcije za upravljanje tipičnim postupkom kompilacije.

U stvarnosti program obično kompajliramo pomoću IDE-a ili alata za izgradnju, a ne izravno se oslanjajući na njega javac. Međutim, čvrsto razumijevanje ovog alata omogućit će nam prilagodbu kompilacije u naprednim slučajevima korištenja.

Kao i uvijek, izvorni kod za ovu lekciju možete pronaći na GitHubu.