A JAVA_HOME-nak egy JDK-ra kell mutatnia, nem pedig JRE-re
1. Bemutatkozás
Ebben az oktatóanyagban egy kivételről fogunk beszélni, amelyet Maven tévesen konfigurál: A JAVA_HOME-nak egy JDK-ra kell mutatnia, nem pedig a JRE-re.
A Maven egy hatékony eszköz az építési szabályzat elkészítéséhez. Megnézzük a motorháztető alatt, hogy megértsük, miért történik ez a hiba, és meglátjuk, hogyan lehet megoldani.
2. A JAVA_HOME Probléma
A Maven telepítése után be kell állítanunk a JAVA_HOME környezeti változó, így az eszköz tudja, hol találja meg a JDK parancsokat végrehajtani. A Maven célok futtatják a megfelelő Java parancsokat a projekt forráskódjával szemben.
Például a leggyakoribb forgatókönyv a kód lefordítása a javac parancs.
Ha JAVA_HOME nem egy érvényes JDK telepítésre mutat, Maven hibát dob minden végrehajtáskor:
mvn -version # Output ... A JAVA_HOME környezeti változó nincs megfelelően definiálva. Ez a környezeti változó a program futtatásához szükséges.
3. JDK vagy JRE
Hogyan ellenőrzi Maven a JAVA_HOME pálya?
Mielőtt bármilyen célt elérne, Maven ellenőrzi a Jáva parancs által meghatározott útvonalon JAVA_HOME vagy az alapértelmezett JDK telepítést kérve az operációs rendszertől. Ha a futtatható fájl nem található, a Maven a hibával szűnik meg.
Itt van mvn futtatható ellenőrzés Linuxhoz (Apache Maven v3.5.4):
ha [-z "$ JAVA_HOME"]; akkor JAVACMD = `melyik java` még JAVACMD =" $ JAVA_HOME / bin / java "fi ha [! -x "$ JAVACMD"]; majd echo "A JAVA_HOME környezeti változó nincs megfelelően definiálva"> & 2 echo "Erre a környezeti változóra szükség van a program futtatásához"
Ez az ellenőrzés első pillantásra ésszerűnek tűnhet, de ezt figyelembe kell vennünk a JDK-nak és a JRE-nek is van egy kuka mappa, és mindkettő tartalmaz egy futtatható fájlt Jáva fájl.
Ezért az konfigurálható JAVA_HOME hogy rámutasson egy JRE telepítésre, elrejtve ezt a hibát és később problémákat okozva. Míg a JRE fő célja a Java kód futtatása, a JDK fordítani és hibakeresni is tud egyéb fontos különbségek mellett.
Emiatt egy mvn össze parancs meghiúsulna - amint a következő alfejezetben látni fogjuk.
3.1. Összeállítási hiba a JRE miatt a JDK helyett
Az alapértelmezett beállításokhoz hasonlóan nagyon hasznosak, ha „szabványos” konfigurációnk van.
Például, ha a Java 11-et telepítjük egy Ubuntu 18.04 rendszerre, és nem állítjuk be a JAVA_HOME környezeti változó, Maven továbbra is boldogan fogja megtalálni a JDK-t és felhasználja a különböző célokhoz, beleértve az összeállítást is.
De ha sikerült egy nem szabványos konfigurációt beállítanunk (nemhogy rendetlenséget csináltunk) a rendszerünkön, akkor Maven segítőkészsége már nem elég. Még félrevezető is lehet.
Tegyük fel, hogy a következő konfiguráció van az Ubuntu 18.04-en:
- JDK 11
- JRE 8
- JAVA_HOME állítsa be a JRE 8 telepítés elérési útjára
Ha elvégezzük az alapellenőrzést:
mvn --verzió
Ilyen értelmes kimenetet kapunk:
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T18: 41: 47Z) Maven home: /opt/apache-maven-3.6.0 Java verzió: 1.8.0_191, szállító: Oracle Corporation, futásidejű: / usr / lib / jvm / java-8-openjdk-amd64 / jre Alapértelmezett területi beállítás: en, platformkódolás: UTF-8 operációs rendszer neve: "linux", verzió: "4.15.0-42-generic", arch: "amd64", család: " unix "
Nézzük meg, mi történik, ha megpróbálunk összeállítani egy projektet:
mvn tiszta fordítás
Most hibát kapunk:
[ERROR] Nem sikerült végrehajtani a cél org.apache.maven.plugins: maven-compiler-plugin: 3.7.0: compile (alapértelmezett-compile) projektet my-app: Compilation hiba [ERROR] Ebben a környezetben nincs fordító. Talán JRE-n fut, nem pedig JDK-n?
3.2. A fordítási hiba kijavítása projekt szinten
Mint sok más esetben a Maven esetében, ajánlatos értelmes rendszerszintű beállításokat megadni - ebben az esetben megváltoztatjuk a JAVA_HOME változó az 5. szakaszban leírtak szerint a JRE helyett a JDK-ra mutat.
Ha azonban bármilyen okból nem állíthatunk be alapértelmezéseket, továbbra is felülírhatjuk a beállításokat a projekt szintjén. Lássuk, hogyan kell ezt megtenni.
Először kinyitjuk a pom.xml projektünkről, menj a szakaszra build / pluginManagement / plugins és vessen egy pillantást a maven-compiler-plugin:
maven-compiler-plugin 3.7.0
Ezután hozzáadunk egy konfigurációt ahhoz, hogy egy egyéni futtatható fájlt használjon, és kihagyja a keresést javac ban,-ben JAVA_HOME / bin Könyvtár:
maven-compiler-plugin 3.7.0 true / usr / lib / jvm / java-11-openjdk-amd64 / bin / javac
Unix rendszereken ennek a futtatható fájlnak megfelelő engedélyekkel rendelkező szkriptnek kell lennie. Windows rendszereken ennek egy .alkalmazás fájl.
Ezután megpróbáljuk újra összeállítani a projektet:
mvn tiszta fordítás
Most a build - beleértve a fordítási fázist a maven-compiler-plugin - sikeres.
4. A. Ellenőrzése JAVA_HOME Konfiguráció
Nagyon egyszerű ellenőrizze, hogy JAVA_HOME egy tényleges JDK-ra mutat. Vagy kinyomtathatjuk a tartalmát egy terminálban, vagy futtathatjuk a következő shell parancsok egyikét:
4.1. Ellenőrzés JAVA_HOME Linux alatt
Csak nyisson meg egy terminált és írja be:
> $ JAVA_HOME / bin / javac -verzió
Ha JAVA_HOME egy JDK-ra mutat, a kimenetnek a következőképpen kell kinéznie:
> javac 1.X.0_XX
Ha JAVA_HOME nem mutat egy JDK-ra, az operációs rendszer hibaüzenetet küld:
> bash: / bin / javac: Nincs ilyen fájl vagy könyvtár
4.2. Ellenőrzés JAVA_HOME Windows rendszeren
Nyissa meg a parancssort, és írja be:
% JAVA_HOME% \ bin \ javac -verzió
Ha JAVA_HOME egy JDK-ra mutat, a kimenetnek a következőképpen kell kinéznie:
> javac 1.X.0_XX
Ha JAVA_HOME nem mutat egy JDK-ra, az operációs rendszer hibaüzenetet küld:
> A rendszer nem találja a megadott elérési utat.
5. A probléma megoldása
Először is tudnunk kell, hol találjuk meg JDK-t:
- Ha a JDK disztribúciónkat egy csomagtelepítő segítségével telepítettük, akkor az operációs rendszer kereső segédprogram segítségével meg kell tudnunk találni az elérési utat
- Ha a terjesztés hordozható volt, ellenőrizzük azt a mappát, ahová kibontottuk
Amint megismerjük a JDK-hoz vezető utat, beállíthatjuk JAVA_HOME környezeti változó, a megfelelő eredmények felhasználásával az adott operációs rendszerünkhöz.
6. Következtetés
Ebben a rövid bemutatóban megvitattuk aA JAVA_HOME-nak egy JDK-ra kell mutatnia, nem pedig JRE-re ” Maven hibát és kivizsgálta annak kiváltó okát.
Végül megbeszéltük, hogyan lehet ellenőrizni a JAVA_HOME környezeti változó, és hogyan lehet megbizonyosodni arról, hogy egy JDK-ra mutat-e.