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.