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.

TL;DR

経験豊富な読者のために 1.Javaのパスは次のようになっています。C:Program Files\Java\jdkxxxx%%bin%%。 2.2. スタートメニューから "environmental variable" で検索し、オプションダイアログを開きます。 3.3.PATHを確認する。古いJavaのパスを削除してください。 4.新しいJavaのパスをPATHに追加します。 5.JAVA_HOME を編集します。 6.console/IDEを閉じて、再度開きます。

ようこそ! あなたは、Java初心者が直面する最も有名な技術的問題の1つに遭遇しました: 'xyz' is not recognized as an internal or external command... エラーメッセージです。 一言で言えば、Javaが正しくインストールされていないということです。WindowsにJavaを最終的にインストールするには、いくつかの手動ステップが必要です。Javaをインストールした後は、JDKをアップグレードした後も含めて、必ず以下の手順を行う必要があります。

環境変数とPATHの設定

(すでに理解されている方は、次の3つのセクションを読み飛ばしていただいて構いません)。 javac HelloWorld.javaを実行するとき、cmd はjavac.exeがどこにあるかを判断しなければなりません。これは、環境変数のPATHで実現されます。 環境変数*](https://en.wikipedia.org/wiki/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が[内部コマンド](https://ss64.com/nt/syntax-internal.html)ではないことを理解した上で、[システムのPATHとそれに続くユーザのPATH]を検索します(https://superuser.com/questions/867728/user-vs-system-environment-variables-do-system-variables-override-user-variabl)。機械的にリストのすべてのディレクトリに入り、 [javac.com, javac.exe, javac.bat など](https://www.nextofwindows.com/what-is-pathext-environment-variable-in-windows)が存在するかどうかをチェックします。そして,`javac`を見つけると,それを実行します.見つからないときは,`'javac' is not recognized as an internal or external command, operable program or batch file.と表示されます. Javaの実行ファイルのディレクトリをPATH`に追加する必要があります。

JDKとJREの違い

*(すでに理解されている方は、このセクションを読み飛ばしていただいて結構です。) Javaをダウンロードする際には、次のどちらかを選択することになります。

  • Java Runtime Environment](https://en.wikipedia.org/wiki/Java_virtual_machine#Java_Runtime_Environment) (JRE)は、Javaプログラムを実行するために必要なツールが含まれていますが、新しいプログラムをコンパイルするためには必要ありません(javaは含まれていますが、javacは含まれていません)。
  • Java Development Kit](https://en.wikipedia.org/wiki/Java_Development_Kit) (JDK)は、javajavacの両方と、その他の開発ツールのホストを含んでいます。JDKはJREのスーパーセットです。 JDKがインストールされていることを確認する必要があります**。JREしかインストールしていない場合には、ハードドライブにJavaコンパイラがインストールされていないので、javacを実行することはできません。Windowsのプログラムリストを確認し、Javaパッケージ'の名前に "Development Kit"の文字が含まれていることを確認してください。

    Don't use set

    (もし、そうするつもりがなければ、遠慮なくこのセクションを読み飛ばしてください。) (もし、そうするつもりがなければ、遠慮なくこのセクションを読み飛ばしてください。) 他のいくつかの回答では、以下のバリエーションを実行することを推奨しています。

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

そのようなことはしないでください。このコマンドにはいくつかの大きな問題があります。 1.1. このコマンドは PATH から他のすべてのもの を消去し、Java のパスに置き換えます。このコマンドを実行すると、他の様々なコマンドが動作しなくなる可能性があります。 2.2. あなたのJavaのパスはC:Program Files\Java\jdk1.7.0_09\binではないでしょう - あなたはほとんど間違いなくJDKの新しいバージョンを持っていて、それは異なるパスを持っているでしょう。 3.3. 新しいPATHは、現在のcmdセッションにのみ**適用されます。コマンドプロンプトを開くたびに、set`コマンドを再入力する必要があります。 1.と2.の点は、この少し良いバージョンで解決できます。

C:\>:: DON'T DO THIS EITHER
C:\>set PATH=C:\Program Files\Java\\bin;%PATH%

しかし、これは一般的には良くない考えです。

Javaのパスを見つける

正しい方法は、Javaをインストールした場所を見つけることから始まります。これは Java を どのように インストールしたかによって異なります。

Exe インストーラ

セットアッププログラムを実行して Java をインストールしました。オラクルのインストーラは、C:Program Files\Java`(または、C:Program Files (x86)Japanese`)の下にJavaのバージョンを配置します。ファイルエクスプローラーまたはコマンドプロンプトで、そのディレクトリに移動してください。 各サブフォルダは、Javaのバージョンを表しています。1つしかない場合は、それを見つけたことになります。そうでなければ、より新しいバージョンのように見えるものを選んでください。フォルダ名が jdk で始まることを確認してください(jre ではなく)。そのディレクトリを入力してください。 次に、その中の bin ディレクトリを入力してください。 これで正しいディレクトリに入ったことになります。パスをコピーします。ファイルエクスプローラーの場合は、アドレスバーをクリックします。コマンドプロンプトであれば、プロンプトをコピーします。 できあがったJavaのパスは、以下のような形式になるはずです(引用符なし)。

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

ジップファイル

JDK の入った .zip をダウンロードしました。邪魔にならない適当な場所(C:Java\)に解凍してください。 そして、その中のどこかに「bin」フォルダを見つけてください。 これで正しいディレクトリに入ったことになります。そのパスをコピーしてください。これがJavaのパスです。 フォルダを移動するとパスが無効になりますので、絶対に移動しないでください。

設定ダイアログを開く

これが PATH を編集するためのダイアログです。WindowsのバージョンやUIの設定、システム構成の乱れ具合によって、このダイアログを表示する方法は様々です。 以下の方法を試してみてください。

  • Start Menu/taskbar search box » "Environment variable&quotを検索する。
  • Win + R » control sysdm.cpl,,3.
  • Win + R » SystemPropertiesAdvanced.exe » Environment Variables
  • ファイルエクスプローラーのアドレスバーにControl PanelSystem and SecuritySystemと入力し、SystemPropertiesAdvanced.exeを実行し、環境変数を設定します。
  • Desktop »This PC »Properties »Advanced System Settings »Environment Variablesを右クリックします。
  • スタートメニュー」から「コンピュータ」を右クリックし、「プロパティ」から「システムの詳細設定」を選択し、「環境変数」を選択します。
  • コントロールパネル(アイコンモード) »システム »システムの詳細設定 »環境変数
  • コントロールパネル(カテゴリモード) »システムとセキュリティ »システム »詳細なシステム設定 »環境変数
  • デスクトップの »マイコンピュータを右クリックして »詳細設定 »環境変数
  • コントロールパネル」→「システム」→「詳細」→「環境変数」。 これらのいずれかを実行すると、正しい設定ダイアログが表示されます。 Windows 10をお使いの場合は、マイクロソフト社が、PATHを編集するためのfancy new UIを用意してくれています。そうでない場合は、セミコロンで囲まれた「PATH」が1行のテキストボックスに押し込められて表示されます。システムを壊すことなく、必要な編集を行うために最善を尽くしてください。

    PATH の整理

    PATHを見てください。ほとんどの場合、2つのPATH変数があります (ユーザーとシステムの環境変数のため)。 その両方を調べる必要があります。 他のJavaパス**をチェックして、それらを削除してください。それらの存在はあらゆる種類のコンフリクトの原因となります。(例えば、PATHにJRE 8とJDK 11が順に入っている場合、javacはJava 11コンパイラを起動し、バージョン55の.classファイルを作成しますが、javaはバージョン52までしかサポートしないJava 8 JVMを起動し、[unsupported version errors](https://stackoverflow.com/questions/10382929/how-to-fix-java-lang-unsupportedclassversionerror-unsupported-major-minor-versi)が発生し、プログラムをコンパイルしたり実行したりすることができません)これらの問題を回避するには、PATHにJavaのパスを1つだけ入れるようにします。また、ついでに古いJavaバージョンを[アンインストール](https://java.com/en/download/faq/remove_olderversions.xml)した方がいいでしょう。また、JDKとJREの両方を持っている必要はありません(https://stackoverflow.com/questions/32988601/do-i-need-both-jdk-and-jre)。 また、「C:ProgramData\Oracle\Java\javapath」があれば、それも削除してください。Oracle社は、アップグレード後にJavaのパスが壊れるという問題を解決するために、常に最新のJavaインストールを指す[シンボリックリンク](https://en.wikipedia.org/wiki/Symbolic_link)を作成しました。しかし残念ながら、間違った場所を指してしまったり、[単純に動作しない](https://stackoverflow.com/questions/26864662/how-to-solve-the-error-the-system-cannot-find-the-file-c-programdata-oracle-ja)ことがよくあります。このエントリーを削除して、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'sの環境変数を更新](https://stackoverflow.com/questions/171588/is-there-a-command-to-refresh-environment-variables-from-the-command-prompt-in-w)する良い方法はありませんので、単純にコマンドプロンプトを閉じて、もう一度開いてみてください。IDEを使用している場合は、IDEも閉じて再度開いてください

    関連情報

  • PATHやその他の環境変数とは何か、またそれらをどのように設定または使用することができますか
  • PATHシステム変数を設定または変更するにはどうすればよいですか](https://java.com/en/download/help/path.xml)
  • Windows でパスと環境変数を設定する方法](https://www.computerhope.com/issues/ch000549.htm)
  • Windows 10 で Path 環境変数を設定するには](https://www.addictivetips.com/windows-tips/set-path-environment-variables-in-windows-10/)
解説 (5)

C:`の後にバックスラッシュを入れていません。これは次のようになります。

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin
解説 (4)

javaコマンドが動作していて、javac.exeで問題が発生した場合、まずjdk'のbinディレクトリにjavac.exeファイルがあるかどうかを確認します。 javac.exeファイルが存在する場合は、システム変数に JAVA_HOME を設定してください。

解説 (0)