Javaコマンドでファイルを実行したいけど「やり方がよくわからない」「操作が難しい」という初心者の方は珍しくありません。最近では、一般ユーザーがコマンド画面で操作する機会は少なく、マウス操作中心です。直感的な画面操作に慣れている方がほとんどでしょう。
しかし、Javaコマンドで必要となるのがコマンドプロンプトの使用です。Javaコマンドは、開発の効率化に使えて、デバッグにも有効なため、さまざまな場面で活用されています。
本記事では、Javaコマンドの基本からファイルを実行する方法、操作手順、対処法まで解説します。
目次
閉じる
1.javaコマンドの基本を押さえる!
まずは、javaコマンドを使う上で押さえておきたい基本的な知識を取り上げます。
javaコマンドとは
javaコマンドは、コマンドプロンプトを使用して、Javaのアプリケーションを起動するための方法です。具体的には、コンパイル済みのjavaファイル(クラスファイル)を実行することができます。
コマンドプロンプトとは
コマンドプロンプトは、javaコマンドの操作に必要となるものです。具体的には、パソコンに命令をする際に、マウス操作ではなく、コマンド画面の行に直接入力するツールです。「コマンドラインツール」とも呼ばれます。
javaコマンドに必要なjavac
javacは、「ジャバック」や「ジャバシー」と読み、Java用のコンパイラのことです。コンパイラとは、プログラムで書かれたコードを機械が理解できるように変換する「コンパイル」を実行するソフトウェアのことです。javaコマンドでは、IDEを使用しないため、コンパイル操作にjavacのコンパイラを使用します。
javawコマンドとの違い
「javawコマンド」は、Javaアプリケーション起動ツールの実行ファイル(ランチャー)です。基本的には、Internet Explorerブラウザで動きます。
しかし、javaコマンドとは異なり、コンソールの入出力ウインドウがありません。そのため、SwingなどのGUIアプリケーションを起動する場合や、何も入力しないで起動するケースに使われるものです。
2.javaコマンドが必要な理由
javaコマンドが必要な理由は以下の2つです。
Java専用のファイル(.java)を起動できる
javaコマンドが必要な理由は、作成したjava拡張子のファイル(.java)を実行するためです。パソコンの直感的な画面操作に使い慣れている方は、ファイルをダブルクリックするだけで通常は開くことができます。
しかし、Java専用のファイル(.java)は、専用のソフトウェアが入っていなければ、アプリケーションは起動できません。それ単体では意味を成さないこともあり、起動自体がされないのです。そのため、クラスの実行をダブルクリックで実際に確認することも不可能です。しかし、javaコマンドで起動すればjava拡張子のファイルでも起動して、コマンド上で実行を確認できます。
例えば、プログラム言語の初歩説明でよく使われる「Hello world」と表示されるプログラムの場合です。javaでソースコードを書いてファイル(.java)作成した場合、そのプログラムをjavaコマンドでコンパイルして実行できます。コマンドプロンプト上には、「Hello world」とすぐに確認できます。
IDEから独立した環境で起動できる
javaコマンドが必要な理由は、もう1つあります。それは、IDEから独立した起動で環境依存しないことです。IDEはバージョンアップで以前は起動できたプラグインが動かなくなることも起こります。
また、GUIには構築に手間がかかる上、一括ビルドできないなどの理由もあり、javaコマンドなら影響を受けにくいのです。リモート開発やクラウド環境の作業では、javaコマンドを使って実行・開発ができます。
3.javaコマンドの環境構築から画面操作する方法と手順
ここではjavaコマンドの初心者向けに、画面上でコマンドを使うのに必要な環境の構築やファイル操作する方法について一連の流れを解説します。
JDKの環境構築
最初に、javaコマンドを使うためのJDKの環境を構築します。すでに導入している場合は、この手順は不要です。
クラスファイル(.java)の用意
次に、javaコマンドで起動するクラスファイルを用意します。テスト用にファイルを作成して保存するか、既存のファイルを「コマンドで指定する予定の場所(ディレクトリ)」に移動します。これで準備は完了です。今回は、「Example」というファイル名で保存し、コードを書きます。
public class Example{ public static void main(String[] args) { System.out.println("これはjavaコードの例です。"); } } |
初心者の方は、例としてよく挙げられる「Hello world」のコードを書いて(その場合は「class Hello」にするとわかりやすい)、指定場所に保存しても良いでしょう。
javaファイルを実行するコマンドプロンプトの呼び出し
ファイルが用意できたら、コマンドプロンプトを起動します。呼び出す方法は、Windowsならスタートボタンを押して入力欄に「cmd」を入力。ショートカットなら「Windows+R」のキーを押すことで開きます。Linuxもこのショートカットで可能です。
上記は短縮方法で、正式なWindowsの手順は「スタートメニュー」から「すべてのプログラム」、「アクセサリ」と開いて、「コマンドプロンプト」を選択すると画面が開きます。
また、Macでは「コマンドプロンプト」を「ターミナル」と呼び、そのショートカット(Finder)をマウス操作で開くか、ターミナルアプリを開くことで、コマンドを入力できる画面が開きます。
コマンドでjavacを使いコンパイルを実行する
今度は、javaコマンドで「.java」のファイルを起動できるようにあらかじめコンパイルします。コンパイルするには、javacというコンパイラを使うのが簡単です。「javac ファイル名.java」です。
例えば、「Example.java」のファイル名で保存した場合は、「javac Example.java」のコマンドを入力します。その結果、エラーが起きなければコンパイルされます。この工程でjavaコマンドにより起動できるクラスファイルが生成されるのです。
コマンドでjavaファイルの場所を指定
コンパイルが完了したら、クラスファイルの場所(ディレクトリ名)をコマンド入力で指定します。デスクトップに保存したファイルがある場合は、Windowsで「cd %USERPROFILE%\Desktop」、Macで「cd ~/Desktop」を入力して移動します。ただし、javacではなく、javaで実行する場合、コマンド入力を2回に分ける必要はありません。1度の入力で完了します。
コマンドでクラスパスからjavaファイルを実行する(クラスファイルの起動)
ファイルの場所(ディレクトリ)を指定した状態で、「java ファイル名」をコマンド画面に入力します。
今回の例の場合、「java Example」の入力です。エラーが出なければコマンドプロンプト上に出力結果が表示されます。今回は、「これはjavaコードの例です。」と表示されるのです。
もし、問題が発生した場合は「ファイルが認識されていません。」などのエラー表示が出ます。
javaでコマンドプロンプトの実行
javaのコマンドで実行する場合、場所指定の個別入力なしに、起動と場所指定を同時に行うことができます。それがclasspath(クラスパス)の「cp」です。
Windows:「java -cp %USERPROFILE%\Desktop Example」
Mac:「java -cp ~/Desktop Example」
OSに応じてcpとファイル場所、ファイル名「Example」をあわせて入力します。これで同じように結果が出力されます。完了したら、コマンドプロンプトを閉じます。
以上は、基本的な操作手順とclasspathオプションコマンドを使用した説明です。そのため、すぐに出力結果の分かる文字でプログラムを起動するものとなっています。しかし、記述する内容次第ではさまざまな結果を出力して問題の検知やデバッグをすることが可能です。
4.javaコマンド実行に失敗したときの対処法
ここまでは、基本的な画面操作の流れを解説しましたが、途中で実行に失敗することがあります。そこで、以下に対処法を紹介します。
JDKの有無やバージョンの確認
JDKが正しくインストールされていない場合にjavaコマンドが実行されないことがあります。そこで対処法の1つ目は、JDKの有無やバージョンをコマンドで確認することです。JDKの有無を確認するには、コマンド入力で次のように指定します。
例えば、Windowsならコマンドプロンプト画面を開いて「java -version」や「javac -version」を入力し、バージョン情報が表示されることをチェックすることです。
環境が構築されていない場合は、次のメッセージが表示されます。
「'javac(or java)' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
javacでもjavaでも同じ表示となります。
MacやLinuxを使用している場合は、「bash: javac(or java): command not found」の表示となります。原因がJava環境の未インストールだった場合、Oracleの公式サイトでJDKをダウンロードしてインストールする必要があります。
PATH(環境変数)の設定
対処法の2つ目は、PATHの設定をすることです。PATHとは、ここではjavaコマンドを実行するのに必要な「環境変数」のことです。
コントロールパネルのシステムからアクセスできます。ショートカットの場合、スタートの入力欄に「環境変数」や「PATH」と入力すれば、「システム環境変数」を開くことができます。
環境変数の編集で、変数に「PATH」とある項目の編集を選択し、「;C:\Program Files\Java\jdk~(ここにバージョン数)\bin」が設定されていることを確認します。すでにPATHがある場合は、変数名称の追加で「PATH」の入力と;C~binを入力して作成することです。PATHに問題があった場合はこれで解決します。
以上の対処方法を試し、コマンドプロンプトを再起動して、実行できるか確認します。
5.jarファイルを実行する方法
javaコマンドに関連して、ここではjarファイルを実行する方法を紹介します。
jarファイルとは
jarファイルは、Javaのプログラミング言語で組んだプログラムを1つのファイルとして格納したものです。拡張子と区別するために、「JARファイル」と大文字で書くこともあります。
つまり、ファイル名に「.jar」の拡張子が付くのが特徴です。jarファイルは、別名「Java Archive」という表記をされることもあります。
javaコマンドとの関係
javaコマンドに関連する理由は、Javaのファイルを扱えることです。しかし、それだけでなく、環境構築の際にインストールするJDKの中に、「.jar」が拡張子のファイルをコマンドプロンプトで操作できるツールが含まれていることです。
Java開発では大規模化することもあります。そのため、ファイル保存や実行はjarファイルを使用することから、javaコマンドとあわせて使い方を覚えておきましょう。
jarファイルの実行手順
jarファイルの実行には、「.jar」拡張子のファイルを用意して、コマンド上で実行します。ダブルクリックでも実行できないわけではありません。しかし、Windowsでは、プログラムがjarの実行を阻害することを公式アナウンスしており、「実行できないことがある」からこそ、javaコマンドはファイル実行の有効な手段です。
ファイル作成から実行手順は以下のとおりです。
Javaでプログラムを書いたファイルの作成
jarファイルはjavaファイルを複数集めたものです。そのため、先にjavaでプログラムを書いたファイル「ファイル名.java」などを作成して用意します。ファイル名がExampleなら「Example.java」といった具合です。すでにjarファイルがある場合は必要ありません。
javacによるコンパイルから生成されたクラスファイルの確認
次に、ファイルをjavacのコマンドでコンパイルします。その結果、生成されたクラスファイルを確認することができます。
マニフェストファイル(manifest.mf)作成
今度はアプリケーションの開始点を決める、「マニフェストファイル(manifest.mf)」の作成を行います。マニフェストファイルでは各行の末尾と最後の文末に改行を入れることが必須です。通常は「Main-Class:」の記述により、ファイル内でメインクラスを指定します。
jarファイル(.jar)作成
次に、マニフェストファイルを指定して、jarファイルを作成する段階です。「jar cfm ファイル名.jar manifest.mf クラスパス指定」という「c」「f」「m」のコマンドを使用します。
コマンドの意味はそれぞれ「jarファイル作成」・「ファイル名指定」・「マニフェスト指定」です。
「実行可能なファイル(.jar)」の実行
コマンドで作成したファイルが実行可能になったので、それをjavaコマンドの「java -jar ファイル名.jar」で実行します。問題がなければ、エラーなく結果が出力されます。
【外部ライブラリ込み】javaコマンドのjar実行をクラス指定
上の手順の例外としては、外部ライブラリで作成する場合です。その際は、マニフェストファイル作成時にメインクラス指定やバージョン記述だけでなく、クラスパスを指定する記述「Class-Path: lib/ライブラリ参照元 lib/クラスパス」もマニフェストに加えます。外部ライブラリを利用する場合は注意しましょう。
【応用】jar(-jar)のリモートデバッグでJavaコマンド実行
javaコマンドには、ローカルとリモートでデバッグできるツール機能が用意されています。本来は、IDEを使ってデバッグしますが、コマンド操作からも環境依存せずにデバッグ可能です。
その方法として、「jdb」というJavaのデバッグツールを使用することです。javaコマンドでJVM(Java仮想マシン;Java Virtual Machine)で検査したり、ローカルとリモートでデバッグしたりすることができます。
上記は、いわゆるオプションコマンドに該当し、ローカルなら「agentlib:jdwp=transport=dt_shmem,server=y,suspend=n」のコマンドです。リモートなら「java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -jar ファイル名.jar」で起動し「jdb -attach 5005」でリモート接続する様式です。
アプリの場合は、「サーバーIP」をattachの後に指定します。java9以降はホスト指定がないと接続にエラーが出るなどの注意点はありますが、リモートデバッグでトラブルシューティングするには非常に便利です。
6.コマンドプロンプトやjavaコマンドのオプション一覧
これまでjavaコマンドの操作で出てきたコマンドや、それ以外のコマンドプロンプトでよく使われるコマンドの一覧です。
cd ディレクトリ指定(コマンドプロンプトで指定のディレクトリに移動)
javac ファイル名.java (ファイル(.java)をコンパイルしてクラス変換)
jar cf ファイル名.jarファイル名.class (簡単なjarファイルの作成)
jar cfm ファイル名.jar Manifest.mf ファイル名.class(jarファイルを本格的に作成)
java -jar ファイル名.jar(作成したjarファイルを実行)
java -cp ファイル名.jar ファイル名(クラスパスを指定してjarファイルを実行)
java -version(Javaバージョンの確認)
javac -version(javacバージョンの確認)
cp(classpath(クラスパス)の設定)
7.javaコマンド実行のよくある質問
javaコマンドを実行する際に、よくある疑問や質問に回答します。
javaコマンドをコマンドプロンプトでわざわざ実行する理由は?
javaコマンドは効率的にjavaファイルやjarファイルを実行して確認・デバッグできる方法だからです。javaコマンドは、コマンドプロンプトを使用してコマンドを入力し、ファイルなどを実行するコマンドの一種です。
専用の環境さえ用意すれば、OS共通のコマンドプロンプトで操作できるため、IDEのようなJava専用の統合開発環境がなくても利用することができます。
コマンドプロンプトでjar実行に必要な「コマンド行引数」とは?
jar実行の際に、解説書などで目にするものに「コマンド行引数」があります。コマンド行引数とは、「コマンドライン引数」とも呼ばれる引数の種類のことです。開始ポイントでクラスの「メイン関数」に与えられる引数(メソッドのデータ)を指します。
jar実行の際に、この引数を指定して処理を始めます。特にjavaコマンドではJVMに起動するため、メイン関数に引き渡す引数はその後のプログラム実行処理において重要な役目を果たすのです。これが上手く設定できていないとエラーの原因になります。
javaコマンドが上手く使えないときは?
javaコマンドは、コマンド操作に慣れていないと、エラーが頻発して上手く使えないことがあります。そのときは、この記事の手順や対処法を参考にして、1からコマンド入力を試してみることです。
使えない理由は大きく分けてJDK開発環境のインストール失敗・入力ミス、パスの未設定の3パターンです。特にプログラミング初心者は、コマンドでエラーが出て「なぜファイルが実行されないのか」がわからず行き詰まってしまうので、操作手順には気をつけましょう。
関連記事
Java初心者ガイド|Java学習のロードマップと効率良い勉強方法を解説
Javaプログラミングで何ができる?始め方や基本文法、練習サイト5つを紹介
8.まとめ
今回は、javaコマンドについて基礎のコマンドプロンプトを使ったjavaファイル・jarファイル実行の方法を紹介しました。Javaでは、組んだソースコードをjava拡張子のファイルで保存したり、それらを1つにまとめたjar拡張子のファイルにします。これらのファイルをIDE環境に依存せずに実行できる方法がjavaコマンドです。
javaコマンドの利用は、処理の効率化やデバッグの効率化などトラブルシューティングにも活用ができます。しかし、実行手順が正確でないと問題やエラーが発生するケースもあります。
対処法も紹介しているので、参考にして初心者から開発経験者まで試しに使ってみましょう。
本記事が皆様にとって少しでもお役に立てますと幸いです。