Java * .class fájlok fordítása javac segítségével

1. Áttekintés

Ez az oktatóanyag bemutatja a javac eszközt, és leírja, hogyan lehet felhasználni Java forrásfájlokat osztályfájlokká fordítani.

Kezdjük egy rövid leírással javac parancsot, majd alaposabban megvizsgálja az eszközt annak különböző lehetőségeinek megvizsgálásával.

2. A javac Parancs

Megadhatunk opciókat és forrásfájlokat a javac eszköz:

javac [opciók] [forrásfájlok]

Hol [opciók] jelöli az eszköz működését vezérlő opciókat, és [forrás fájlok] egy vagy több fordítandó forrásfájlt jelöl.

Valamennyi opció teljesen opcionális. A forrásfájlok közvetlenül megadhatók argumentumként a javac parancsot, vagy egy hivatkozott argumentumfájlban tárolja a későbbiekben leírtak szerint. Figyelje meg, hogy a forrásfájlokat egy könyvtár hierarchiába kell rendezni, amely megfelel az azokban szereplő típusok teljesen minősített nevének.

A lehetőségek javac három csoportba sorolják: standard, keresztkompiláció és extra. Ebben a cikkben a standard és az extra lehetőségekre fogunk összpontosítani.

A keresztfordítási lehetőségeket használják a ritkábban használt esetekhez, amikor a típusmeghatározásokat a fordító környezetétől eltérő JVM-megvalósítással fordítják össze, és nem foglalkoznak velük.

3. Típusmeghatározás

Kezdjük azzal, hogy bemutatjuk az osztályt, amelyet a bemutatására használunk javac opciók:

public class Data {List textList = new ArrayList (); public void addText (String text) {textList.add (text); } public list getTextList () {return this.textList; }}

A forráskód a fájlba kerül com / baeldung / javac / Data.java.

Vegye figyelembe, hogy ebben a cikkben * nix fájlelválasztókat használunk; Windows gépeken a visszavágót kell használnunk (’\') az elővágás helyett („/').

4. Normál opciók

Az. Egyik leggyakrabban használt standard opciója javac parancs az -d, a létrehozott osztályfájlok célkönyvtárának megadása. Ha egy típus nem része az alapértelmezett csomagnak, akkor a csomag nevét tükröző könyvtárstruktúra jön létre az osztályfájl megtartása érdekében.

Hajtsuk végre a következő parancsot az előző szakaszban megadott struktúrát tartalmazó könyvtárban:

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

A javac a fordító generálja az osztályfájlt javac-target / com / baeldung / javac / Data.class. Vegye figyelembe, hogy egyes rendszereken javac nem hozza létre automatikusan a célkönyvtárat, ami javac-target ebben az esetben. Ezért szükség lehet erre manuálisan.

Íme néhány más gyakran használt lehetőség:

  • -cp (vagy -útvonal, –Osztály-út) – meghatározza, hogy hol találhatók meg a forrásfájljaink összeállításához szükséges típusok. Ha ez az opció hiányzik, és a CLASSPATH környezeti változó nincs beállítva, helyette az aktuális munkakönyvtárat használják (ahogy az a fenti példában is történt).
  • -p (vagy –Modul-út) – jelzi a szükséges alkalmazási modulok helyét. Ez az opció csak a Java 9 és újabb verziókra vonatkozik - kérjük, olvassa el ezt az oktatóanyagot a Java 9 modulrendszer ismertetéséhez.

Ha meg akarjuk tudni, hogy mi zajlik egy összeállítási folyamat során, pl. mely osztályok vannak betöltve és melyek vannak fordítva, alkalmazhatjuk a -bőbeszédű választási lehetőség.

Az utolsó standard opció, amelyre kiterjedünk, az argumentumfájl. Ahelyett, hogy közvetlenül argumentumokat adna a javac eszközzel tárolhatjuk őket argumentumfájlokban. Ezeknek a fájloknak a neve a karaktert, akkor parancs argumentumként használják.

Amikor az javac parancs találkozik egy „@” kezdetű argumentummal, a következő karaktereket egy fájl elérési útjának értelmezi, és argumentumlistává bővíti a fájl tartalmát. Szóközök és újsor karakterek használhatók az ilyen argumentumfájlban szereplő argumentumok elkülönítésére.

Tegyük fel, hogy két fájlunk van, megnevezve opciók, és típusok, ban,-ben javac-args könyvtár a következő tartalommal:

A opciók fájl:

-d javac-target -verbose

A típusok fájl:

com / baeldung / javac / Data.java

Összeállíthatjuk a Adat írja be, mint korábban, a konzolra nyomtatott részletes üzenetekkel a parancs végrehajtásával:

javac @ javac-args / options @ javac-args / type

Ahelyett, hogy az argumentumokat külön fájlokban tartaná, mindet egyetlen fájlban is tárolhatjuk.

Tegyük fel, hogy van egy fájl neve érvek ban,-ben javac-args Könyvtár:

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

Töltsük fel ezt a fájlt javac hogy ugyanazt az eredményt érje el, mint az előző két külön fájlnál:

javac @ javac-args / argumentumok

Vegye figyelembe, hogy az ebben a szakaszban átélt lehetőségek csak a leggyakoribbak. A szabvány teljes listája javac lehetőségeket, nézze meg ezt a hivatkozást.

5. Extra opciók

További opciók javac nem szabványos opciók, amelyek a fordító jelenlegi implementációjára vonatkoznak, és a jövőben módosíthatók. Mint ilyen, nem fogjuk részletesen áttekinteni ezeket a lehetőségeket.

Van azonban egy olyan lehetőség, amely nagyon hasznos és érdemes megemlíteni, -Xlint. A másik teljes leírása javac további lehetőségekért kövesse ezt a linket.

A -Xlint opcióval engedélyezhetjük a figyelmeztetéseket a fordítás során. Kétféle módon adhatja meg ezt az opciót a parancssorban:

  • -Xlint - minden ajánlott figyelmeztetést kivált
  • -Xlint: kulcs [, kulcs] * - lehetővé teszi a speciális figyelmeztetéseket

Íme néhány praktikus -Xlint kulcsok:

  • nyomatípusok - figyelmeztet a nyers típusok használatára
  • ellenőrizetlen - figyelmeztet az ellenőrizetlen műveletekre
  • statikus - figyelmeztet a statikus taghoz való hozzáférésre egy példánytagtól
  • szereplő - figyelmeztet a felesleges dobásokra
  • soros - figyelmeztet arra, hogy a sorozatozható osztályok nem rendelkeznek a serialversionUID
  • kudarcba fullad - figyelmeztet az átesésre a kapcsoló nyilatkozat

Most hozzon létre egy nevű fájlt xlint-ops ban,-ben javac-args könyvtár a következő tartalommal:

-d javac-target -Xlint: rawtypes, nem ellenőrzött com / baeldung / javac / Data.java

A parancs futtatásakor:

javac @ javac-args / xlint-ops

látnunk kellene a nyers típusok és ellenőrizetlen figyelmeztetések:

com / baeldung / javac / Data.java: 7: figyelmeztetés: [rawtypes] talált nyers típus: ArrayList List textList = new ArrayList (); ^ hiányzó típusú argumentumok az ArrayList általános osztályhoz, ahol E egy típusváltozó: E kiterjeszti az ArrayList osztályban deklarált objektumot com / baeldung / javac / Data.java: 7: figyelmeztetés: [nem ellenőrzött] nem ellenőrzött konverzió List textList = new ArrayList (); ^ szükséges: Leltár: ArrayList ...

6. Következtetés

Ez az oktatóanyag végigjárta a javac eszköz, amely bemutatja az opciók használatát a tipikus fordítási folyamat kezeléséhez.

A valóságban általában egy programot egy IDE vagy egy build eszköz segítségével állítunk össze, ahelyett, hogy közvetlenül támaszkodnánk rá javac. Ennek az eszköznek a megértése azonban lehetővé teszi számunkra a fordítás testreszabását fejlett felhasználási esetekben.

Mint mindig, az oktatóanyag forráskódja megtalálható a GitHubon.