Javaコマンドの流れ

Javaの構文についての詳細について説明する前に、JavaソースファイルからJavaプログラムを実行するまでの流れについて説明します。

  1. Javaのプログラムは、最初にJavaソースファイル(*.java)を作成します。
  2. ソースの格納先ディレクトリ「c:¥education¥src¥main¥java」にパッケージ階層で格納します。
  3. javacコマンドを適切なオプションを付与して実行します。
  4. javacコンパイルが成功するとオプションで指定したclassesディレクトリにクラスファイル(*.class)が作成されます。
  5. javaコマンドを実行する経路は2通りあります。
    1. jarコマンドを実行して、Jarファイル(*.jar)を作成します。
      その後javaコマンドでJarファイルを指定して実行します。[図上]
    2. classesディレクトリを指定して、その後javaコマンドで実行します。[図下]

Javaアプリケーションを作成する時には、Jarファイルを作成して実行するのが正しい方法です。[図上]
Jarファイルは、classesディレクトリ以下に生成されたクラスファイルをZIP形式で圧縮したファイルです。
圧縮することにより、ファイルサイズや管理するファイルが減ることがメリットです。
1つのJavaクラスファイルでもJarファイルを作成する習慣をつけましょう。

javacコマンド

javacコマンドの説明

Javaソースファイルが完成したら、javacコマンドを実行し、Javaソースファイルをコンパイルし、クラスファイルを作成します。

javacコマンド
javac オプション Javaソースファイル名(相対パス/絶対パス)
javacコマンドの実行例1
c:¥projects¥education>javac -d deploy¥classes -s src¥main¥java -encoding UTF8
                              src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥BoxOnly.java
c:¥projects¥education>
						
javacコマンドの実行例2
c:¥projects¥education>javac -d deploy¥classes -s src¥main¥java -encoding UTF8
                              src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥*.java
c:¥projects¥education>
						
javacコマンドの実行例3 別ファイルに纏めて定義
c:¥projects¥education>javac @arglist @srclist
						
						
arglist(c:¥projects¥education配下)
	-d deploy¥classes
	-s src¥main¥java
	-cp deploy¥classes
	-encoding UTF-8
						
srclist(c:¥projects¥education配下)
src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥HowToWriteJava.java
src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥BoxOnly.java
src¥main¥java¥jp¥co¥yourcompany¥education¥util¥Test.java
						

javacコマンドは、Java8のインストールでPathにJDKのbinを設定し、
カレントディレクトリのどのディレクトリからも正しいパスを指定すれば、どこのディレクトリでも実行できます。

ただし、javacコマンドはプロジェクトディレクトリで実行するがJavaの作法です。
上記例では「c:¥projects¥education」ディレクトリから実行するのが正しいやり方です。

Javaソースファイル名は、絶対パスでする方法と相対パスで指定する方法がありますが、
プロジェクトディレクトリ(eduction)からの相対パスで指定する方法が一般的です。
GUIのEclipseもそのようになっています。

Javaソースファイルが1つの場合には、実行例1のように1つのファイルを指定します。

Javaソースファイルが同一パッケージに複数のある場合には、
実行例2のように「*.java」で指定します。指定したディレクトリ配下のJavaソースファイルが全てコンパイルされます。

実行例3のケースが、AntやEclipseなどの便利なツールが出る前はこの方法が多かったです。
javacのオプションファイルarglistとJavaソースファイルsrclistの2つを作成し、@で指定して利用します。
残念な事に*.javaの省略系はファイルには利用できません。全て列記します。
srclistの上から順にコンパイルされれるので、
結合密度の低い(他のクラスをimport節している数が少ない)順から定義しなくてはいけませんでした。

利用頻度の高いオプションについて説明します。

javacコマンドのオプション

オプション 利用例 説明
-d ディレクトリ名
(相対パス/絶対パス)
-d deploy¥classes Javaソースファイル(*.java)をコンパイルし、
Javaクラスファイル(*.class)を出力するディレクトリ先を指定します。
指定するディレクトリは先に作成されている必要があります。
-s ディレクトリ名
(相対パス/絶対パス)
-s src¥main¥java Javaソースファイル(*.java)ソースファイルの格納先ディレクトリを指定します。
Javaソースファイル(*.java)がpackageに属している場合には、
そのパッケージ階層のディレクトリを作成する必要があります。
例)jp¥co¥yourcompany¥education¥samplesこのディレクトリは全て作成します。
-encoding エンコード名 -encoding UTF-8 Javaソースファイル(*.java)のエンコードを指定します。
前頁で説明したUTF-8やEUC_JP等です。
このオプションが指定されていない場合には、
プラットフォームのデフォルト・エンコードが利用されます。
-cp クラスパスディレクトリ名 -cp deploy¥classes;
lib¥sprig-mvc¥Hogehoge.jar;
Javaソースファイル(*.java)をコンパイル時に参照するJavaクラスファイル(*.class)
「;」(セミコロン)で複数指定します。
-d で指定したクラスファイルの出力先ディレクトリが忘れがちになるのでご注意を

注意-cpでクラスパスをしているする方法があります。
環境変数「classpath=クラスパスディレクトリ」で設定できます。
この方法は、コマンドプロンプトのsetLocalとendLocalのように一時的な変数としての利用は、良いです。
Webアプリケーションサーバのサーバ環境でシステム環境変数に設定されると保守性が著しく低下します。

その他オプションについては、Oracle社Java8のjavac説明頁をご参照下さい。

jarコマンド

jarコマンドは、指定したディレクト及びファイルを指定したjarファイル名にZIP形式で圧縮します。

jarコマンドは、Javaのコマンドで一番重要で開発現場の問題発生時に一番利用されるコマンドです。

Linux,Unix系OSでCUIでコマンドベースで作業下で、Javaアプリケーション、Webアプリケーションが動かないなどのトラブル時に
配備したjarファイルの中身を確認する作業は多々あります。

jarコマンドや引数は色々ありますが、本書に記載された内容さえ抑えておけば十分開発現場で利用できます。

jarファイルの新規作成

javacコマンドによるjarファイルの作成方法
javac -cvf 出力するjarファイル名(相対パス/絶対パス) -C clasesディレクトリの相対パス .
jarコマンド 新規作成時
c:¥projects¥education>jar -cvf deploy¥education-main.jar -C deploy¥clases .
マニフェストが追加されました
jp/を追加中です(入=0)(出=0)(0%格納されました)
jp/co/を追加中です(入=0)(出=0)(0%格納されました)
jp/co/yourcompany/を追加中です(入=0)(出=0)(0%格納されました)
jp/co/yourcompany/education/を追加中です(入=0)(出=0)(0%格納されました)
jp/co/yourcompany/education/samples/を追加中です(入=0)(出=0)(0%格納されました)
jp/co/yourcompany/education/samples/BoxOnly.classを追加中です(入=224)(出=188)(16%収縮されました)
jp/co/yourcompany/education/samples/ExecBoxOnly.classを追加中です(入=1148)(出=598)(47%収縮されました)
jp/co/yourcompany/education/samples/HowToWriteJava.classを追加中です(入=1899)(出=1033)(45%収縮されました)
jp/co/yourcompany/education/util/を追加中です(入=0)(出=0)(0%格納されました)
jp/co/yourcompany/education/util/Test.classを追加中です(入=360)(出=253)(29%収縮 されました)
						
javaコマンドによる実行確認
c:¥projects¥education>java -cp deploy¥education-main.jar
     jp.co.yourcomapny.education.samples.HowToWrite
こんにちは 日本へ
-------- END outputMessage method------------
メッセージが指定されていません。
-------- END outputMessage method------------
インスタンス2のHello
-------- END outputMessage method------------
こんにちは 日本へ
						
  • -cvf オプションの「c」は指定された名前でjarファイルを新規作成する意味です。
  • -cvf オプションの「v」はjarコマンドの経過を標準出力に出力します。
  • -cvf オプションの「f」は「jarファイル名」で出力先を指定している事を意味します。
    このオプションは「c(新規作成)」「x(解凍)」「t(一覧表示)」に関係なく
    必ず指定するものだと理解しておいて下さい。
  • 出力するjarファイル名(相対パス/絶対パス)は、jarコマンドが実行されたカレントディレクトリからの相対パスまたは
    または絶対パスで指定します。
    jarファイル名指定した場合、カレントディレクトリに出力されます。
    開発現場では、「bin」「deploy」ディレクトリにjarファイルは作成します。本書では、「deploy」ディレクトリに管理します。
  • 「-C クラスファイルの保存しているディレクトリ名」
    このオプションは、jarコマンドの実行する位置を変更しています。
    実行例1では「c:¥projects¥education¥deploy¥classes」にカンレントディレクトリが移動して、
    jarコマンドが実行されています。jarコマンドを実行したカレントディレクトリから相対パスでclassesディレクトリを示します。
  • 「. (ピリオード)」
    これは、-Cで指定されたディレクトリ(deploy¥classes)の配下の全てのディレクトリ、ファイルを圧縮する意味です。
    これは、ディレクトリやファイル名を特定するので、classesディレクトリから相対パスで1つのJavaファイル名を指定することも可能です。

jarファイルの中身確認

javacコマンドによるjarファイルの中身の確認方法
jar -tvf 確認するjarファイル名(相対パス/絶対パス) > 結果を保存するファイル名
jar 閲覧コマンド
c:¥projects¥education>jar -tvf deploy¥education-main.jar > jar_result.txt
						
  • -tvf オプションの「t」は指定されたjarファイルを表示する意味です。
  • -tvf オプションの「v」「f」は新規作成時の説明と同じです。
  • > jar_result.txtはjar -tvf コマンド結果の標準出力への出力値をjar_result.txtにリダイレクトしてテキストに出力しています。
    「> (リダイレクション)」は、OSのコマンドで良く利用されます。
    先に実行したコマンドの標準出力への出力をファイルに出力する方法です。
    jar -tvf だけで実行すると1000個のclassファイルが圧縮されていたときには、目視では追いきれません。
    そのため、一旦テキストファイルに結果を落として確認するようにします。

jarファイルの展開方法

jarコマンドによるjarファイルの展開方法
jar -xvf 出力するjarファイル名(相対パス/絶対パス)
javacコマンドの実行例1
c:¥projects¥education¥temp>jar -xvf education-main.jar
						
  • 前作業として、対象となるjarファイルを「c:¥projects¥education¥temp」などの作業ディレクトリにコピーします。
  • 作業ディレクトリ「c:¥projects¥education¥temp」で jar -xvf education-main.jarを実行します。
  • 指定したjarファイルがカレントディレクトリ「temp」配下に展開されます。
  • -xvf オプションの「x」は指定されたjarファイルを展開する意味です。
  • -xvf オプションの「v」「f」は新規作成時の説明と同じです。

jarコマンドのその他

jarコマンドには、jarファイルに特定のファイルを追加及び抽出することができます。
本書では、その方法を説明しないのは、配備環境のjarファイルに手を加える行為はデグレなどの発生率が高くなるからです。

知っていても損はないので、Oracle社 jarコマンドを一通り学習するのも良いでしょう。

javaコマンド

Javaソースファイルが完成したら、javacコマンドを実行し、Javaソースファイルをコンパイルし、クラスファイルを作成します。

通常の手順では、jarコマンドでjarファイルを作成してからjavaコマンドを実行します。
本書では、圧縮しないJavaクラスファイルの状態とjarファイルの両方について説明します。

javaコマンド
java オプション 実行するクラス名 実行引数1 実行引数N
javaコマンドの実行例 jarから実行する
c:¥projects¥education>java -cp deploy¥education-main.jar jp.co.yourcompany.education.samples.HowToWriteJava
こんにちは 日本へ
-------- END outputMessage method------------
メッセージが指定されていません。
-------- END outputMessage method------------
インスタンス2のHello
-------- END outputMessage method------------
こんにちは 日本へ
						
javaコマンドの実行例 classファイルのクラスパスを指定して実行する
c:¥projects¥education>java -cp deploy¥classes jp.co.yourcompany.education.samples.HowToWriteJava
※.結果割愛
						
  • 「-cp」はクラスパスのオプションでjarファイル名かクラスファイルが保存されているclassesディレクリを指定します。
    クラスパスに複数のライブラリを指定する場合には、「-cp hoge1.jar;hoge2.jar;」で「;(セミコロン)」で区切ります。
  • 実行するクラス名は、パッケージ名も付与された完全修飾名で指定します。
  • 2017年2月時点で、開発現場では必ずjarファイルを作ってからjavaアプリケーションを実行するお作法が正しいと理解して下さい。

「実行するクラス名 実行引数1 実行引数N」は指定したJavaクラスに引数を0~N個引き渡すことができます。

Javaの実行部メソッドpublic static void main( String[] args )String[] args の引数が、
正に、実行引数1~実行引数Nを意味します。

実行引数を与えなければ、String[] args のサイズは0です。
実行引数を与えた場合には、args配列に指定された順番で設定されます。

その他細かいオプションについては、Oracle社のjavaコマンドをご確認下さい。

javadocコマンド

このコマンドは、JavaソースコードからJavaAPIを生成するコマンドです。

Javaの前準備で説明させて頂いた
JavaAPI「C:¥developer¥java¥javaapi¥java8api¥api¥index.html」と同じように
指定したJavaソースファイルからJavaアプリケーションのAPIをhtmlで生成します。

javadocコマンド
javadoc オプション 対象のJavaソースファイル名
javadocコマンドの実行例 srclistを利用
c:¥projects¥education>javadoc -cp deploy¥education-main.jar - -d docs¥api -encoding UTF-8 -docencoding UTF-8 @srclist
 -header  "<h1>IT生涯学習Tech 教育用サンプルアプリ</h>" -footer " &copy;raita.kuwabara "
ソース・ファイルsrc¥main¥java¥jp¥co¥yourcompany¥education¥samples¥HowToWriteJava.javaを読み込んでいます...
ソース・ファイルsrc¥main¥java¥jp¥co¥yourcompany¥education¥samples¥ExecBoxOnly.javaを読み込んでいます...
ソース・ファイルsrc¥main¥java¥jp¥co¥yourcompany¥education¥util¥Test.javaを読み込んでいます...
Javadoc情報を構築しています..
標準Docletバージョン1.8.0_112
全パッケージとクラスの階層ツリーを作成しています...
docs¥api¥jp¥co¥yourcompany¥education¥samples¥BoxOnly.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥samples¥ExecBoxOnly.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥samples¥HowToWriteJava.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥util¥Test.htmlの生成中...
docs¥api¥overview-frame.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥samples¥package-frame.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥samples¥package-summary.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥samples¥package-tree.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥util¥package-frame.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥util¥package-summary.htmlの生成中...
docs¥api¥jp¥co¥yourcompany¥education¥util¥package-tree.htmlの生成中...
docs¥api¥constant-values.htmlの生成中...
全パッケージとクラスのインデックスを作成しています...
docs¥api¥overview-tree.htmlの生成中...
docs¥api¥index-all.htmlの生成中...
docs¥api¥deprecated-list.htmlの生成中...
全クラスのインデックスを作成しています...
docs¥api¥allclasses-frame.htmlの生成中...
docs¥api¥allclasses-noframe.htmlの生成中...
docs¥api¥index.htmlの生成中...
docs¥api¥overview-summary.htmlの生成中...
docs¥api¥help-doc.htmlの生成中...
						
srclist
src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥BoxOnly.java
src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥HowToWriteJava.java
src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥ExecBoxOnly.java
src¥main¥java¥jp¥co¥yourcompany¥education¥util¥Test.java
						
  • @srclistでソースファイルを一覧で指定している方法は,javacコマンドの方法と同じです。
  • @arglistでオプションをarglistで指定することも可能です。javacコマンドの方法と同じです。

javadocコマンドのオプション

オプション 利用例 説明
-d ディレクトリ名
(相対パス/絶対パス)
-d docs¥api javadocが生成するapiの出力先ディレクトリ
指定するディレクトリは先に作成されている必要があります。
-cp クラスパスディレクトリ名 -cp deploy¥classes Javaソースファイル(*.java)をjavadoc実行時に参照するJavaクラスファイル(*.class)
「;」(セミコロン)で複数指定します。
-encoding エンコード名 -encoding UTF-8 Javaソースファイル(*.java)のエンコードを指定します。
前頁で説明したUTF-8やEUC_JP等です。
このオプションが指定されていない場合には、
プラットフォームのデフォルト・エンコードが利用されます。
-docencoding エンコード名 -docencoding UTF-8 javadocで出力するAPI用のhtmlファイルのエンコードを指定します。
前頁で説明したUTF-8やEUC_JP等です。
このオプションが指定されていない場合には、
プラットフォームのデフォルト・エンコードが利用されます。
-header "ヘッダー用のHTMLタグ" -header "<h1>IT生涯学習Tech 教育用アプリケーションAPI<h1>" 出力されるapiのヘッダーに指定したhtmlタグを設定します。
通常開発したアプリケーション名やアプリケーションのログ画像などhtmlタグで設定します。
-footer "フッター用のHTMLタグ" -footer "&copy;raita.kuwabara " 出力されるapiのフッターに指定したhtmlタグを設定します。
通常納品先の会社名のライセンス表記をします。

Oracle社 javadocコマンドにその他全てのオプションが記載されています。

javadocコマンド出力例

このように綺麗にAPI中にコメントがしっかり記述されているのは、初めてのJavaの基本スタイルで
Javaソースファイルにコメントをきちんとjavadoc形式で記述しているからです。

javadoc出力例の画像

次頁にコメントの記述方法について説明する際にjavadoc形式のコメントを説明します。