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シェルを使用し、JavaをOracleインストーラーでインストールした場合、次のものを.bash_profile
に追加できます。
export Java_HOME=$(/usr/libexec/Java_home)
export PATH=$Java_HOME/jre/bin:$PATH
これにより、Oracleインストーラーで定義されている正しいJava_HOME
が選択され、$PATH
で最初に設定されて、検出されます。
また、後でJavaを更新するときに変更する必要はありません。
編集
コメントによると:
再起動後に永続化する
これらの行をシェル構成ファイルに追加するだけです。 (bash
と仮定)
例:.bashrc
、.bash_profile
または.profile
(ubuntuの場合)
カスタムJavaインストールの使用
Java_HOME
を、$()
なしのカスタムJavaインストールパスのルートフォルダーに設定します。
例:Java_HOME=/opt/Java/openjdk
Java_HOMEは/usr/lib/jvm/Java-7-Oracle/jre/
でなければなりません。
ターミナルを開き、Javaの場所を探します。
manuel@zonademanel:~ → 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です。これはシンボリックリンクであるため、絶対パスを見つけるためにコマンドラインで続行します。
manuel@zonademanel:~ → ls -lah /usr/bin/Java
lrwxrwxrwx 1ルートルート2015年5月22日/ usr/bin/Java->/etc/alternatives/Java
manuel@zonademanel:~ → ls -lah /etc/alternatives/Java
lrwxrwxrwx 1ルートルート39 dic 7 11:52/etc/alternatives/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/lib/jvm/Java-8-Oracle/jre "
再ログインしたくない場合は、次の方法で変更をリロードできます。
source /etc/environment
そしてmvn -versionを正しく実行します
manuel@zonademanel:~ → mvn -version
Apache Maven 3.0.5
Mavenホーム:/ usr/share/maven
Javaバージョン:1.8.0_77、ベンダー:Oracle Corporation
Javaホーム:/ usr/lib/jvm/Java-8-Oracle/jre
デフォルトロケール:es_MX、プラットフォームエンコーディング:UTF-8
OS名:「linux」、バージョン:「3.16.0-70-generic」、Arch:「AMD64」、family:「unix」
$Java_HOME
は、その一部ではなく、Javaがインストールされたディレクトリである必要があります。
export Java_HOME=/usr/lib/jvm/Java-7-Oracle
いくつかの理由により、このエラーが発生する場合があります。これをすばやく修正するには、以下の手順に従ってください。
最初にJavaロケーションを見つけます。インストールされている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
上記のコマンドは、問題でシステムが見つけようとしているシンボリックリンクの場所を作成します。
最後に
$ mvn --version
私の場合、Javaがインストールされているディレクトリ全体を取得する必要があります。
export Java_HOME=/usr/Java/jdk1.8.0_31
まず、開発モードでは、JREの代わりにJDKを使用する必要があります。第二に、Java_HOMEはJavaをインストールする場所であり、他のすべてのフレームワークは必要なもの(JRE、javac、...)を検索します
あなたが設定した場合
Java_HOME =/usr/lib/jvm/Java-7-Oracle/jre/bin/Java
「mvn」コマンドを実行すると、Mavenは/ bin/Javaを追加してJavaへのアクセスを試みます。Java_HOMEはJavaインストールのルートディレクトリにあると考えられます。
しかし、設定
Java_HOME =/usr/lib/jvm/Java-7-Oracle /
Mavenはbin/Javaの追加にアクセスし、正常に機能します。
そのままJava_HOME =/usr/Java/jdk1.8.0_31.exportに設定し、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
エラーが解決されます。注:エクスポートJava_HOMEのmvnログでマシンによって表示される独自のパスを貼り付けます。
次の2つのコマンドを使用します(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コマンドを使用して開きます: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を押します(save-buffers-kill-terminal)。
Mac-OSを使用している場合、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のパスです