Javaのインストールに少々はまった話 in Windows10

そうだ JavaでWebアプリケーションを作ろう

今回はJavaでWebアプリケーションを作ろうとしてWindows10にJavaをインストールしたのですが、今まで色々とブラックボックスのまま来てしまったためにハマったお話です。このような細かな話はわりとみんな理解していないで進めている人も多いのではないでしょうか。当記事を読んでスッキリしていってください。

さて、まずはJavaをダウンロードするわけです。しかしJavaにはパッケージがいくつかあり、今回の件ではどれを選択すればいいのか。パッケージの分類をおさらいしてみましょう。

JDK

JDKはJavaの分類でごっちゃになりやすいですが、JavaSEに属しています。JavaSEはJDKとJREに分類されるのです。

・Java

→ JDK

→ JRE

JDKとJREはそれぞれ、Development、Runtimeの頭文字をとってきています。Java アプリケーションを動かすだけならRuntime、Java アプリケーションを開発するならDevelopmentといった具合に使い分けます。

私はJavaEEはサーバー側の実装まで出来るJavaで、JavaSEはアプリケーションを作るJavaと覚えていました。しかし、サーバー側の実装はJavaSEでも出来るようです。実際、私はたまにサーバー側の実装であるServletを実装しますが、使用しているのはJavaSEです。

ということで、今回JavaのWebアプリケーションを作るに当たってダウンロードするのはJavaSEのJDKです。

インストール

Javaをインストールしました。ここまでは簡単です。実行ファイルをダウンロードして実行するのみですから。難しいのは設定の方で、やるべきことがあります。と言っても、やり方と意味さえわかってしまえばとても簡単なことですので怖がることはありません。

インストールしたJavaを有効にするにはシステム環境変数のPathを編集する必要があります。と、思っていたのですが最近のJavaではJavaをインストールすると自動で有効に設定されるようです。これには非常に驚きました。コマンドプロンプトで java -version と入力して現在有効なJavaのバージョンを確認できるのですが、インストールしただけで有効になっているのです。システム環境変数を設定していないのに。

ナニコレわからないことするの辞めてって感じだったのですが、これはWeb上でも散見されて、みなさん困惑しているようですね。ですので、少しまとめておきます。上記コマンドでversion確認したJavaですが、本来はシステム環境変数Pathに対してインストールしたJavaの場所を追加しなければ有効になりません。しかし、システム環境変数Pathを確認してみると、現在はインストールしたJavaの場所は追加されていませんでした。では、Javaはどこを見てバージョン情報を返したのでしょうか。

そんなときには、where java というコマンドが便利です。Javaの場所を確認することが出来ます。そうしてJavaの場所確認をしますと C:\ProgramData\Oracle\Java\javapath と出てきました。オイオイなんだよこんなところに Java 入れた覚え無いぞというお話なのですが、これはデフォルトで設定されるもののようです。Javaをインストールするとデフォルトで上記のパスにJavaをインストールした場所のシンボリックリンク(私の環境では実アプリケーションでした)を配置します。

システムの環境変数 Path にも C:\ProgramData\Oracle\Java\javapath との記載がありました。以前の自分で設定する方法に慣れてしまっている方はナニコレ有難迷惑設定!と思うかもしれませんが、このような仕組みになっているようです。

というわけで、自分で設定する方法に慣れている私は以前と同様の設定状況にしたいと思いました。以前と同様の設定にしたいのは、今回インストールしたJava9系でなく8系も使いたかったためです。システム環境変数Pathを指定しなおせば8でも9でも自由に使えると思いました。

・JAVA_HOME C:\Program Files\Java\jdk1.8.0_161

・Path %JAVA_HOME%\bin

と、思ったのですが次の記事を発見。

エラーが出る場合があります。

「C:\Windows\System32」配下にある「java.exe」が起動時に、レジストリに登録されているJDKバージョンを見に行き、
自分自身のバージョンと異なればエラーを吐いて起動しないようにしているためのようです。

開発者の宿命というか、JavaのJDKを複数自分のPCにインストールしています。 メインの開発はJDK1.7で行い、最新のプロダクトを試してみるためには、JDK1.8を使用するといった具合に。 私のWindowsには1.6,1.7,1.8のバージョンがインストールされているのですが、自分の思ったようにJDKのバージョン...

まじですか、Javaをinstallするとレジストリにまで影響があるのですか。。レジストリはいじりたくない。ということで、おとなしく現状に登録されているJava9系を使用していこうと思います。

要注意なのは、システム環境変数のPathは設定されているけど、JAVA_HOMEは設定されていないので自分で設定する必要があります。
システム環境変数のJAVA_HOME は Tomcat で使われる設定です。

JAVA_HOME C:\Program Files\Java\jdk-9.0.4

以上、Java install に少々はまった話でした。

Let's share SNS