قمت بتثبيت Java وتعيين المسار إلى البيئة وعندما أقوم بتنفيذ echo $Java_HOME
، أحصل على الإخراج التالي:
/usr/lib/jvm/Java-7-Oracle/jre/bin/Java
لقد قمت أيضًا بتثبيت Apache-maven
وتغيير ملف environment
والآن يبدو كما يلي:
Java_HOME="/usr/lib/jvm/Java-7-Oracle/jre/bin/Java"
M2_HOME=/usr/local/Apache-maven/Apache-maven-3.0.5
M2=$M2_HOME/bin
MAVEN_OPTS="-Xms256m -Xmx512m"
PATH=$M2:$PATH
لكن عندما أقوم بتنفيذ mvn --version
، تلقيت تحذيرًا:
Error: Java_HOME is not defined correctly.
We cannot execute /usr/lib/jvm/Java-7-Oracle/jre/bin/Java/bin/Java
لا يمكن معرفة سبب تكراره في النهاية /bin/Java/bin/Java
على افتراض أنك تستخدم bash Shell وتثبيت Java مع مثبت Oracle ، يمكنك إضافة ما يلي إلى .bash_profile
الخاص بك
export Java_HOME=$(/usr/libexec/Java_home)
export PATH=$Java_HOME/jre/bin:$PATH
سيؤدي هذا إلى انتقاء الرمز الصحيح Java_HOME
كما هو محدد بواسطة مثبت Oracle وسيضعه أولاً في $PATH
مع التأكد من العثور عليه.
أيضًا ، لا تحتاج إلى تغييره لاحقًا عند تحديث Java.
تصحيح
حسب التعليقات:
مما يجعلها مستمرة بعد إعادة تشغيل الكمبيوتر
فقط أضف هذه السطور في ملف تكوين Shell. (على افتراض أنها bash
)
على سبيل المثال: .bashrc
أو .bash_profile
أو .profile
(لـ ubuntu)
باستخدام تثبيت جافا مخصص
اضبط Java_HOME
على المجلد الجذر لمسار تثبيت Java المخصص دون $()
.
مثال: Java_HOME=/opt/Java/openjdk
يجب أن يكون Java_HOME /usr/lib/jvm/Java-7-Oracle/jre/
.
نفتح محطة ونبحث عن موقع Java:
[email protected]:~ → whereis Java
Java:/usr/bin/Java/etc/Java/usr/bin/X11/Java/usr/share/Java /usr/share/man/man1/Java.1.gz
ما نبحث عنه هو/usr/bin/Java تستمر في سطر الأوامر للعثور على المسار المطلق ، لأن هذا ليس سوى رابط رمزي.
[email protected]:~ → ls -lah /usr/bin/Java
lrwxrwxrwx 1 root root 22 May 19 2015/usr/bin/Java ->/etc/بدائل/Java
[email protected]:~ → ls -lah /etc/alternatives/Java
lrwxrwxrwx 1 root root 39 dic 7 11:52/etc/بدائل/Java ->/usr/lib/jvm/Java-8-Oracle/jre/bin/Java
قمت بتعديل ملفي/etc/environment مع القيم التالية
PATH = "/ usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/Java-8-Oracle/jre/bin "Java_HOME ="/usr/lr/jvm/Java-8-Oracle/jre "
إذا كنت لا أريد إعادة تسجيل الدخول ، فيمكنني إعادة تحميل التغييرات باستخدام:
source /etc/environment
وتشغيل mvn -version بشكل صحيح
[email protected]:~ → mvn -version
اباتشي مافن 3.0.5
مافن المنزل:/usr/share/maven
إصدار جافا: 1.8.0_77 ، البائع: Oracle Corporation
صفحة Java الرئيسية:/usr/lib/jvm/Java-8-Oracle/jre
الإعدادات المحلية الافتراضية: es_MX ، ترميز النظام الأساسي: UTF-8
اسم نظام التشغيل: "linux" ، الإصدار: "3.16.0-70-generic" ، القوس: "AMD64" ، العائلة: "unix"
$Java_HOME
يجب أن يكون الدليل حيث تم تثبيت Java ، وليس أحد أجزائه:
export Java_HOME=/usr/lib/jvm/Java-7-Oracle
قد تحصل على هذا الخطأ بسبب عدة أسباب. لإصلاح هذا بسرعة ، يرجى اتباع الخطوات التالية ،
أولا العثور على موقع جافا. للحصول على قائمة بمنصات Java المثبتة لديك ، قم بتشغيل الأمر التالي من الجهاز:
$ Sudo update-alternatives --config Java
الآن قم بتعيين Java_HOME و PATH ،
$ export Java_HOME=<Java_home>
$ export PATH=$Java_HOME/jre/bin:$PATH
إنشاء الارتباط
$ Sudo ln -s <Java_home>/jre <Java_symlink_path>
عندما نأخذ قضيتك كمثال:
$ Sudo ln -s /usr/lib/jvm/Java-7-Oracle/jre /usr/lib/jvm/Java-7-Oracle/jre/bin/Java
سيؤدي الأمر أعلاه إلى إنشاء موقع symlink حيث يحاول النظام العثور عليه في مشكلتك.
وأخيرا القيام
$ mvn --version
يجب أن تأخذ الدليل بالكامل حيث تم تثبيت Java ، في حالتي:
export Java_HOME=/usr/Java/jdk1.8.0_31
أولاً ، في وضع التطوير ، يجب عليك استخدام JDK بدلاً من JRE. ثانياً ، Java_HOME هو المكان الذي تقوم فيه بتثبيت Java وحيث تبحث جميع أطر العمل الأخرى عما يحتاجون إليه (JRE ، javac ، ...)
لذلك إذا قمت بتعيين
JAVA_HOME =/البيرة/ليب/JVM/جافا 7 أوراكل/جري/بن/جافا
عند تشغيل أمر "mvn" ، سيحاول Maven الوصول إلى Java عن طريق إضافة/bin/Java ، معتقدًا أن Java_HOME في الدليل الجذر لتثبيت Java.
لكن الإعداد
JAVA_HOME =/البيرة/ليب/JVM/جافا 7 أوراكل /
سوف Maven الوصول إلى إضافة بن/جافا ثم ستعمل على ما يرام.
قم بتعيين كما هو تصدير Java_HOME =/usr/Java/jdk1.8.0_31. وتشغيله مع Sudo سوف ينفذ ..
يعمل هذا الحل بالنسبة لي ... فقط اكتب export PATH=$Java_HOME/jre/bin:$PATH
في الجهاز الطرفي ثم شغل mvn -version
وسيظهر الخطأ نفسه ولكن مع سجل مثل هذا
which: no javac in (/jre/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/puppetlabs/bin)
Warning: Java_HOME environment variable is not set.
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T22:59:23+05:30)
Maven home: /opt/Apache-maven-3.2.5
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: /usr/lib/jvm/Java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", Arch: "AMD64", family: "unix"
الآن قم بنسخ المسار Java home
أي /usr/lib/jvm/Java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
في حالتي.
اكتب الآن ،
export Java_HOME=/usr/lib/jvm/Java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
والخطأ يحصل حل. ملاحظة: الصق المسار الخاص بك والذي يظهر بواسطة جهازك في سجل mvn عند تصدير Java_HOME.
استخدم هذين الأمرين (لنظام Java 8):
Sudo update-Java-alternatives --set Java-8-Oracle
Java -XshowSettings 2>&1 | grep -e 'Java.home' | awk '{print "Java_HOME="$3}' | sed "s/\/jre//g" >> /etc/environment
يحدث بسبب السبب المذكور أدناه:
إذا رأيت البرنامج النصي mvn: فشل الرمز هنا ---
خطوات لتصحيح الأخطاء وإصلاحها:
الخطوة 1: افتح البرنامج النصي mvn /Users/Username/Apache-maven-3.0.5/bin/mvn (افتح باستخدام الأمر الأقل مثل: less /Users/Username/Apache-maven-3.0.5/bin/mvn)
الخطوة 2: معرفة الرمز أدناه في البرنامج النصي:
if [ -z "$JAVACMD" ] ; then
if [ -n "$Java_HOME" ] ; then
if [ -x "$Java_HOME/jre/sh/Java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$Java_HOME/jre/sh/Java"
else
JAVACMD="$Java_HOME/bin/Java"
fi
else
JAVACMD="`which Java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: Java_HOME is not defined correctly."
echo " We cannot execute $JAVACMD"
exit 1
fi
Step3: يحدث لأنه لم يتم تعيين متغير JAVACMD
. لذلك يعرض الخطأ.
ملاحظة: لإصلاحها
export JAVACMD=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/bin/Java
export Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/
المفتاح: إذا كنت تريد أن تكون دائمة emacs .profile
قم بنشر الأوامر واضغط على Ctrl-x Ctrl-c (حفظ-المخازن المؤقتة-محطة القتل).
إذا كنت تستخدم نظام التشغيل mac ، فيجب تغيير export Java_HOME=/usr/libexec/Java_home
إلى export Java_HOME=$(/usr/libexec/Java_home)
. خطوات للقيام بذلك:
$ vim .bash_profile
export Java_HOME=$(/usr/libexec/Java_home)
$ source .bash_profile
حيث /usr/libexec/Java_home
هو مسار jvm الخاص بك