web-dev-qa-db-ja.com

javacが内部コマンドまたは外部コマンド、操作可能プログラム、またはバッチファイルとして認識されていません

Javaプログラムをコンパイルしようとしているときにエラーが発生しました。

私はWindows上にいて(これはWindows特有の問題です)、最新のJDKがインストールされています。

私はPATH変数を含む解決策を試みましたが、エラーは解決しません。

コンソール出力:

C:\>set path=C:Program Files (x86)\Java\jdk1.7.0\bin
C:\>javac Hello.Java
'javac' is not recognized as an internal or external command,
operable program or batch file.
223
user987137

TL; DR

経験豊富な読者向け:

  1. Javaパスを見つけます。次のようになります:C:\Program Files\Java\jdkxxxx\bin\
  2. 「環境変数」のスタートメニュー検索により、オプションダイアログが開きます。
  3. PATHを調べます。古いJavaパスを削除します。
  4. 新しいJavaパスをPATHに追加します。
  5. Java_HOMEを編集します。
  6. コンソール/ IDEを閉じて再度開きます。

ようこそ!

Java初心者が直面する最も悪名高い技術的問題の1つ、'xyz' is not recognized as an internal or external command...エラーメッセージに遭遇しました。

一言で言えば、Javaを正しくインストールしていません。 WindowsでJavaのインストールを完了するには、いくつかの手動手順が必要です。 JDKのアップグレード後も含め、Javaをインストールした後は、常にこれらの手順を実行する必要があります。

環境変数とPATH

(これを既に理解している場合は、次の3つのセクションをスキップしてください。)

javac HelloWorld.Javaを実行するとき、cmdはjavac.exeの場所を決定する必要があります。これは、環境変数PATHで実現されます。

environment variable は、特別なキーと値のペアです(例:windir=C:\WINDOWS)。ほとんどはオペレーティングシステムに付属しており、一部はシステムが正常に機能するために必要です。それらのリストは、起動時にすべてのプログラム(cmdを含む)に渡されます。 Windowsの場合 があります 2種類ユーザー環境変数およびシステム環境変数

次のような環境変数を確認できます。

C:\>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\craig\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
...

最も重要な変数は PATH です。これは、;で区切られたパスのリストです。コマンドがcmdに入力されると、リスト内の各ディレクトリで一致する実行可能ファイルがスキャンされます。

私のコンピューターでは、PATHは次のとおりです。

C:\>echo %PATH%
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPower
Shell\v1.0\;C:\ProgramData\Microsoft\Windows\Start Menu\Programs;C:\Users\craig\AppData\
Roaming\Microsoft\Windows\Start Menu\Programs;C:\msys64\usr\bin;C:\msys64\mingw64\bin;C:\
msys64\mingw32\bin;C:\Program Files\nodejs\;C:\Program Files (x86)\Yarn\bin\;C:\Users\
craig\AppData\Local\Yarn\bin;C:\Program Files\Java\jdk-10.0.2\bin;C:\ProgramFiles\Git\cmd;
C:\Program Files\Oracle\VirtualBox;C:\Program Files\7-Zip\;C:\Program Files\PuTTY\;C:\
Program Files\launch4j;C:\Program Files (x86)\NSIS\Bin;C:\Program Files (x86)\Common Files
\Adobe\AGL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program
Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\iCLS Client\;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files
(x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\iCLS
Client\;C:\Users\craig\AppData\Local\Microsoft\WindowsApps

javac HelloWorld.Java、cmdを実行すると、javac内部コマンド ではないことに気づいたときに、 system PATHに続いてユーザーPATH を検索します。リスト内のすべてのディレクトリを機械的に入力し、 javac.comjavac.exejavac.batなど が存在するかどうかを確認します。 javacを見つけると、それを実行します。表示されない場合、'javac' is not recognized as an internal or external command, operable program or batch file.を出力します

Java実行可能ファイルのディレクトリをPATHに追加する必要があります。

JDKとJRE

(これを既に理解している場合は、このセクションをスキップしてください。)

Javaをダウンロードするとき、次のいずれかを選択できます。

  • Java Runtime Environment (JRE)。これにはJavaプログラムを実行するために必要なツールが含まれますが、新しいプログラムをコンパイルするためにnotJavaは含まれていますが、javacは含まれていません。
  • Java Development Kit (JDK)。これには、Javajavacの両方、および他の開発ツールのホストが含まれます。 JDKはJREのスーパーセットです。

JDKをインストールしたことを確認する必要があります。 JREのみをインストールした場合は、Javaコンパイラがハードドライブにインストールされていないため、javacを実行できません。 Windowsプログラムリストを確認し、Javaパッケージの名前に「Development Kit」という単語が含まれていることを確認します。

setを使用しないでください

(とにかく計画していなかった場合は、このセクションをスキップしてください。)

他のいくつかの回答では、次のバリエーションを実行することを推奨しています。

C:\>:: DON'T DO THIS
C:\>set PATH=C:\Program Files\Java\jdk1.7.0_09\bin

そんなことしたらダメ。そのコマンドにはいくつかの大きな問題があります。

  1. このコマンドは、PATHからelseをすべて消去し、Javaパスに置き換えます。このコマンドを実行した後、他のさまざまなコマンドが機能しない場合があります。
  2. JavaパスはおそらくそうではありませんC:\Program Files\Java\jdk1.7.0_09\bin –ほとんど間違いなく、新しいバージョンのJDKがあります。別のパス。
  3. 新しいPATHは、現在のcmdセッションにのみ適用されます。コマンドプロンプトを開くたびに、setコマンドを再入力する必要があります。

ポイント1と2は、このわずかに優れたバージョンで解決できます。

C:\>:: DON'T DO THIS EITHER
C:\>set PATH=C:\Program Files\Java\<enter the correct Java folder here>\bin;%PATH%

しかし、それは一般的に悪い考えです。

Javaパスを見つけます

正しい方法は、Javaをインストールした場所を見つけることから始まります。これは、Javaをインストールしたhowに依存します。

エグゼインストーラー

セットアッププログラムを実行して、Javaをインストールしました。 Oracleのインストーラーは、JavaのバージョンをC:\Program Files\Java\(またはC:\Program Files (x86)\Java\)の下に配置します。エクスプローラーまたはコマンドプロンプトを使用して、そのディレクトリに移動します。

各サブフォルダーはJavaのバージョンを表します。 1つしかない場合は、それを見つけました。それ以外の場合は、新しいバージョンのように見えるものを選択します。フォルダー名がjdkで始まることを確認してください(jreではなく)。ディレクトリを入力します。

次に、そのbinディレクトリを入力します。

これで正しいディレクトリに移動しました。パスをコピーします。エクスプローラーの場合は、アドレスバーをクリックします。コマンドプロンプトの場合、 copy プロンプト。

結果のJavaパスは次の形式(引用符なし)である必要があります。

C:\Program Files\Java\jdkxxxx\bin\

ZIPファイル

JDKを含む.Zipをダウンロードしました。邪魔にならないランダムな場所に抽出します。 C:\Java\は選択可能です。

次に、binフォルダーをその中のどこかに配置します。

これで正しいディレクトリに移動しました。そのパスをコピーします。これはJavaパスです。

フォルダーを移動しないでください。パスが無効になるためです。

設定ダイアログを開く

これは、PATHを編集するためのダイアログです。 Windowsのバージョン、UI設定、およびシステム構成の混乱に応じて、このダイアログにアクセスする方法は多数あります。

これらのいくつかを試してください:

  • スタートメニュー/タスクバー検索ボックス"「環境変数」を検索
  • 勝利+ R"control sysdm.cpl,,3
  • Win + R"SystemPropertiesAdvanced.exe"環境変数
  • ファイルエクスプローラー"アドレスバーに入力Control Panel\System and Security\System"システムの詳細設定(左端、サイドバー)"環境変数
  • デスクトップ"このPCを右クリック"プロパティ"詳細システム設定"環境変数
  • [スタート]メニュー"[コンピューター]を右クリック"[プロパティ]"[システムの詳細設定]"[環境変数]
  • コントロールパネル(アイコンモード)"システム"詳細なシステム設定"環境変数
  • コントロールパネル(カテゴリモード)"システムとセキュリティ"システム"詳細なシステム設定"環境変数
  • デスクトップ"マイコンピュータを右クリック"詳細"環境変数
  • コントロールパネル"システム"詳細設定"環境変数

これらのいずれでも、正しい設定ダイアログが表示されます。

Windows 10を使用している場合、MicrosoftはPATHを編集するために fancy new UI を用意しています。それ以外の場合は、セミコロンで覆われた栄光にPATHが表示され、1行のテキストボックスに絞り込まれます。システムを破壊することなく、必要な編集を行うために最善を尽くします。

PATHを消去

PATHを見てください。ほとんど間違いなく、2つのPATH変数があります(ユーザー環境変数とシステム環境変数のため)。両方を見る必要があります。

other Javaパスを確認して削除します。それらの存在はあらゆる種類の衝突を引き起こす可能性があります。 (たとえば、PATHにJRE 8とJDK 11がこの順序である場合、javacはJava 11コンパイラーを呼び出します。これにより、バージョン55 .classファイルが作成されますが、Javaは呼び出されますJava 8 JVM、バージョン52までしかサポートしていないため、 サポートされていないバージョンエラー が発生し、プログラムをコンパイルおよび実行できません。 PATHにはJavaパスが1つだけあることを確認してください。そして、あなたがそれをしている間に、 古いJavaバージョンをアンインストール にすることもできます。そして、あなたが 持っている必要はない JDKとJREの両方であることを忘れないでください。

C:\ProgramData\Oracle\Java\javapathがある場合は、も削除します。オラクルは、常に最新のJavaインストールを指す シンボリックリンク を作成することにより、アップグレード後にJavaパスが壊れる問題を解決することを意図していました。残念ながら、しばしば間違った場所を指すことになるか、または 単に機能しない になります。このエントリを削除し、Javaパスを手動で管理することをお勧めします。

これは、PATHに対して一般的なハウスキーピングを実行する良い機会でもあります。 PCにインストールされていないソフトウェアに関連するパスがある場合は、それらを削除できます。また、パスの順序を入れ替えることもできます(そのようなことを気にする場合)。

PATHに追加

次に、3ステップ前に見つけたJavaパスを取得して、システムPATHに配置します。

リスト内の新しいパスがどこに行くかは問題ではありません。最後に配置するのは良い選択です。

Windows 10以前のUIを使用している場合は、セミコロンが正しく配置されていることを確認してください。リスト内のすべてのパスを区切るのは1つだけです。

ここで言うべきことは他にあまりありません。 PATHにパスを追加して、[OK]をクリックします。

Java_HOMEを設定

その間、Java_HOMEを設定することもできます。これは、Javaパスも含む必要がある別の環境変数です。人気のあるJavaビルドシステム Gradle など、多くのJavaおよび非Javaプログラムは、正しく設定されていないとエラーをスローします。

Java_HOMEが存在しない場合は、新しいシステム環境変数として作成します。 PATHに追加したのと同じJavaパスに設定します。

Javaをアップグレードした後は、Java_HOMEも必ず編集してください。

コマンドプロンプトを閉じて再度開きます

PATHを変更しましたが、cmdを含むすべての実行中のプログラムは、古いPATHのみを表示します。これは、すべての環境変数のリストが実行を開始するときにのみプログラムにコピーされるためです。その後、キャッシュされたコピーのみを参照します。

cmdの環境変数を更新する に良い方法はないので、単にコマンドプロンプトを閉じて再度開きます。 IDEを使用している場合は、IDEを閉じて再度開きます。

こちらもご覧ください

398
carlos c.

これを試してください。私もそれを持っていましたが、今ではXPで解決しました.

C:\ YourFolder >set path=C:\Program Files\Java\jdk1.7.0_09\bin;
C:\ YourFolder >javac YourCode.Java
75

setコマンドの入力ミス - C:の後にバックスラッシュを付けませんでした。そのはず:

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin
42
Raghuram

コマンドプロンプトから次のコマンドを実行します。set Path="C:\Program Files\Java\jdk1.7.0_09\bin"またはset PATH="C:\Program Files\Java\jdk1.7.0_09\bin"

私はこれを試しました、そしてそれはうまくいきます。

9
fresher

Javaコマンドが動作していてjavacで問題が発生している場合その後、最初にjdkのbinディレクトリにあるjavac.exeファイルをチェックインします。 javac.exeファイルが存在する場合は、システム変数としてJava_HOMEを設定します。

5
Umrao Rawat

環境変数を確認してください。

私の場合は、 システム変数 および私の ユーザーアカウント 変数にJava_HOMEを設定し、後者は 間違ったバージョンのJava に設定しました。 Path変数についても同じ問題がありました。

私のユーザーアカウント variablesからJava_HOMEを削除し、Path変数から誤ったパスを削除した後、正しく機能していました。

3
romanoma