web-dev-qa-db-ja.com

エラー:Java_HOMEが正しく定義されておらず、Mavenを実行しています

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

52
user3127896

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

76
rbento

Java_HOMEは/usr/lib/jvm/Java-7-Oracle/jre/でなければなりません。

19
talex

ターミナルを開き、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
9
Mureinik

いくつかの理由により、このエラーが発生する場合があります。これをすばやく修正するには、以下の手順に従ってください。

最初に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
5
tk_

私の場合、Javaがインストールされているディレクトリ全体を取得する必要があります。

export Java_HOME=/usr/Java/jdk1.8.0_31
2
trenixjetix

まず、開発モードでは、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の追加にアクセスし、正常に機能します。

2
Jad B.

そのままJava_HOME =/usr/Java/jdk1.8.0_31.exportに設定し、Sudoで実行すると実行されます。

2
rohit sawant

この解決策は私のために働いています...ターミナルで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
Mohit Garg

次の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
1
Xdg

これは、下記の理由により発生します。

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)。

1
Shubham Verma

Mac-OSを使用している場合、export Java_HOME=/usr/libexec/Java_homeexport Java_HOME=$(/usr/libexec/Java_home)に変更する必要があります。これを行う手順:

 $ vim .bash_profile

 export Java_HOME=$(/usr/libexec/Java_home)

 $ source .bash_profile

ここで、/usr/libexec/Java_homeはjvmのパスです

1
ishanbakshi