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.
248
3
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つのタイプがあります。*ユーザー環境変数」と「システム環境変数」です。 環境変数は次のように表示されます。最も重要な変数は
PATH
です。これはパスのリストで、;
で区切られています。cmdにコマンドが入力されると、リスト内の各ディレクトリがスキャンされ、一致する実行ファイルが探し出されます。 私のコンピュータでは、PATH
は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
は含まれていますが、javac
は含まれていません)。java
とjavac
の両方と、その他の開発ツールのホストを含んでいます。JDKはJREのスーパーセットです。 JDKがインストールされていることを確認する必要があります**。JREしかインストールしていない場合には、ハードドライブにJavaコンパイラがインストールされていないので、javac
を実行することはできません。Windowsのプログラムリストを確認し、Javaパッケージ'の名前に "Development Kit"の文字が含まれていることを確認してください。Don't use
set
(もし、そうするつもりがなければ、遠慮なくこのセクションを読み飛ばしてください。) (もし、そうするつもりがなければ、遠慮なくこのセクションを読み飛ばしてください。) 他のいくつかの回答では、以下のバリエーションを実行することを推奨しています。
そのようなことはしないでください。このコマンドにはいくつかの大きな問題があります。 1.1. このコマンドは
PATH
から他のすべてのもの を消去し、Java のパスに置き換えます。このコマンドを実行すると、他の様々なコマンドが動作しなくなる可能性があります。 2.2. あなたのJavaのパスはC:Program Files\Java\jdk1.7.0_09\binではないでしょう - あなたはほとんど間違いなくJDKの新しいバージョンを持っていて、それは異なるパスを持っているでしょう。 3.3. 新しい
PATHは、現在のcmdセッションにのみ**適用されます。コマンドプロンプトを開くたびに、
set`コマンドを再入力する必要があります。 1.と2.の点は、この少し良いバージョンで解決できます。しかし、これは一般的には良くない考えです。
Javaのパスを見つける
正しい方法は、Javaをインストールした場所を見つけることから始まります。これは Java を どのように インストールしたかによって異なります。
Exe インストーラ
セットアッププログラムを実行して Java をインストールしました。オラクルのインストーラは、C:Program Files\Java`(または、C:Program Files (x86)Japanese`)の下にJavaのバージョンを配置します。ファイルエクスプローラーまたはコマンドプロンプトで、そのディレクトリに移動してください。 各サブフォルダは、Javaのバージョンを表しています。1つしかない場合は、それを見つけたことになります。そうでなければ、より新しいバージョンのように見えるものを選んでください。フォルダ名が
jdk
で始まることを確認してください(jre
ではなく)。そのディレクトリを入力してください。 次に、その中のbin
ディレクトリを入力してください。 これで正しいディレクトリに入ったことになります。パスをコピーします。ファイルエクスプローラーの場合は、アドレスバーをクリックします。コマンドプロンプトであれば、プロンプトをコピーします。 できあがったJavaのパスは、以下のような形式になるはずです(引用符なし)。ジップファイル
JDK の入った .zip をダウンロードしました。邪魔にならない適当な場所(C:Java\)に解凍してください。 そして、その中のどこかに「bin」フォルダを見つけてください。 これで正しいディレクトリに入ったことになります。そのパスをコピーしてください。これがJavaのパスです。 フォルダを移動するとパスが無効になりますので、絶対に移動しないでください。
設定ダイアログを開く
PATH
を編集するためのダイアログです。WindowsのバージョンやUIの設定、システム構成の乱れ具合によって、このダイアログを表示する方法は様々です。 以下の方法を試してみてください。control sysdm.cpl,,3
.SystemPropertiesAdvanced.exe
» Environment VariablesControl Panel
System and SecuritySystem
と入力し、SystemPropertiesAdvanced.exe
を実行し、環境変数を設定します。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も閉じて再度開いてください。関連情報
C:`の後にバックスラッシュを入れていません。これは次のようになります。
javaコマンドが動作していて、javac.exeで問題が発生した場合、まずjdk'のbinディレクトリにjavac.exeファイルがあるかどうかを確認します。 javac.exeファイルが存在する場合は、システム変数に
JAVA_HOME
を設定してください。