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.
。 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`に追加する必要があります。
*(すでに理解されている方は、このセクションを読み飛ばしていただいて結構です。) Javaをダウンロードする際には、次のどちらかを選択することになります。
java
は含まれていますが、javac
は含まれていません)。java
とjavac
の両方と、その他の開発ツールのホストを含んでいます。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.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\<enter the correct Java folder here>\bin;%PATH%
しかし、これは一般的には良くない考えです。
正しい方法は、Javaをインストールした場所を見つけることから始まります。これは Java を どのように インストールしたかによって異なります。
セットアッププログラムを実行して 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の設定、システム構成の乱れ具合によって、このダイアログを表示する方法は様々です。
以下の方法を試してみてください。
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も閉じて再度開いてください。
javaコマンドが動作していて、javac.exeで問題が発生した場合、まずjdk'のbinディレクトリにjavac.exeファイルがあるかどうかを確認します。
javac.exeファイルが存在する場合は、システム変数に JAVA_HOME
を設定してください。