Javadoc
ソースコード → プログラム仕様書の自動生成を行う開発ツール。
Javadocコマンド・オプション
参考: javadocコマンド
ターミナル等のコマンドラインツールでJavadocを出力するコマンド・オプションは、以下の通り。
% javadoc <オプション> <.javaファイル>
| オプション | 内容 |
|---|---|
-d <出力先パス> |
Javadocドキュメントの出力先を指定 |
-private |
privateメンバを出力対象に加える |
-encoding |
ソースコードの文字コード |
-docencoding |
Javadocドキュメントの文字コード |
-charset |
Javadocドキュメント閲覧時の文字コード |
-author |
@authorタグが付与されるクラスの実装者を出力 |
-version |
@versionタグが付与されるクラスのバージョン情報を出力 |
Javadocタグ
利用機会の多いJavadocタグは、以下の通り。
| タグ | 内容 | クラス/インタフェース | フィールド | メソッド |
|---|---|---|---|---|
@author <実装者> |
クラスの実装者 | o | ||
@version <バージョン番号> |
クラスのバージョン情報 | o | ||
@param <引数名> <説明文> |
引数の詳細情報 |
o | ||
@return <説明文> |
戻り値の詳細情報 |
o | ||
@exception <FQCN> <説明文> |
送出可能性のある例外の説明 |
o | ||
@see <クラス名> |
関連するクラス | o | o | o |
@since <バージョン番号> |
実装時のバージョン情報 | o | o | o |
@deprecated <解説> |
非推奨である旨の明示 | o | o | o |
javacコマンド
ソースファイル → クラスファイルの生成(=コンパイル)を行うコマンド。
-Xlintオプションを用いることで、ソースコードの軽度な不備(=警告)をコンソールに出力することができる。
% javac <オプション> <ソースファイル>
アナテイション
クラス・インタフェースやそのメンバに対して、以下のアナテイションを付与することで、
-Xlintオプションを用いてコンパイルした際に出力する警告を調整することができる。
| アナテイション | 内容 |
|---|---|
@SuppressWarnings("<パラメータ>") |
警告対象から除外 |
@Override |
親クラスのメソッドとのスペルチェック |
@Deprecated |
非推奨である旨をコンパイラに明示 |
@SuppressWarningアナテイションのパラメータ
@SuppressWarningアナテイションで引数に指定するパラメータは、以下の通り。
| パラメータ | 抑制対象 |
|---|---|
all |
全て |
serial |
シリアルバージョンUID |
cast |
不要なキャスト
|
unchecked |
代入チェックのないキャスト
|
jarコマンド
クラスファイル -> JARファイルの自動生成を行うコマンド。
なお、JARファイルの生成時にはマニフェストファイル(=.mfファイル)が自動で生成される。
# JARファイルの生成
% jar -cvf <JARファイル名> <クラスファイルが含まれるディレクトリパス>
# 独自のマニフェストファイルを格納したJARファイルの生成
% jar -cvfm <JARファイル名> <マニフェストファイル名> <クラスファイルが含まれるディレクトリパス>
# JARファイルの展開
% jar -xvf <JARファイル名>
# JARファイルの閲覧
% jar -tvf <JARファイル名>
マニフェストファイルの属性(エントリ)
マニフェストファイルに含まれる主なエントリは、以下の通り。
| エントリ | 内容 |
|---|---|
Manifest-Version |
マニフェストファイルのバージョン番号
|
Created-By |
マニフェストファイルを生成したJavaに関する情報 |
Class-Path |
参照ライブラリの相対パス
|
Main-Class |
mainメソッドを含むメインクラスの完全限定名(= FQCN) |
Automatic-Module-Name |
モジュール名 |
なお、Main-Class属性を指定することで、JARファイルの実行時にメインクラスの指定が不要となり、
一部のOSで「ダブルクリック」によるJARファイルの起動が可能となる。
javaコマンド
クラスファイルまたはJARファイルのメインクラスを実行するコマンド。
# メインクラスを含むJARファイルの起動(Main-Class属性に記述がない場合)
% java -cp <JARファイル名> <メインクラスのFQCN>
# メインクラスを含むJARファイルの起動(Main-Class属性に記述がある場合)
% java -jar <JARファイル名>
# ガベージコレクションの発生毎に情報を出力
% java -verbose:gc <メインクラスのFQCN>
# JVMへの割り当てメモリ容量を指定して実行
% java -Xms<最小割当量> -Xmx<最大割当量> <メインクラスのFQCN>
2種類のメモリ領域(スタック/ヒープ)とガベージコレクション
参考: Javaにおける参照の仕組み
参照型オブジェクトの変数名および値型(=プリミティブ型)データの変数名と値はスタック領域(stack)で保持され、
参照型オブジェクトの値や値型データを保持する配列の値はヒープ領域(heap)で保持される。
一般的にヒープ領域の方がスタック領域よりも大量に消費され、
空きメモリが少なくなるとJVM内部で動作するガベージコレクタによってガベージコレクションが行われる。
また、ガベージコレクションの実行時はObjectクラスのfinalize()メソッド(=ファイナライザ(finalizer))が呼び出され、
ヒープ領域の解放処理が終了するまで他の処理が中断される。
この仕様により、長期稼働するプログラムではメモリリーク(memory leak)が発生し、処理が一向に実行されないフリーズ状態に陥る可能性がある。
JShell
Javaを対話的に実行できる開発ツール。jshellコマンドによって起動することができる。
サンプルコード
% jshell
| JShellへようこそ -- バージョン16.0.1
| 概要については、次を入力してください: /help intro
jshell> int a = 10
a ==> 10
jshell> if (a >= 10) {
...> a++;
...> }
jshell> System.out.println(a);
11
ビルドの自動化ツール
| ビルドツール | 内容 |
|---|---|
| バッチファイル(batch file) |
Windowsで利用される、ビルドコマンドを列挙することで順次実行を行うファイル |
| シェルスクリプト(shell script) |
macOSやLinuxで利用される、ビルドコマンドを列挙することで順次実行を行うファイル |
Apache Ant |
build.xmlファイルによってビルド手順を定めるツール |
Apache Maven |
プロジェクトの各種情報を記述するpom.xmlと標準フォルダ構造に沿ってMaven標準コマンドを実行することでビルドを自動化するツール |
Maven
参考: Maven Tips
Mavenプロジェクトに関する情報を記述するPOM(project object model)と、
ファイルの種類毎に格納場所が定められた標準フォルダ構造に従って、
Maven標準コマンドを実行することでビルドが行われる。
POM
XMLで記述されたPOMのタグ(属性)は、以下の通り。
| タグ | 内容 |
|---|---|
<project> |
Mavenプロジェクトの各属性の親タグ |
<modelVersion> |
POMモデルのバージョン情報 |
<groupId> |
Mavenプロジェクトの作成者の識別ID |
<artifactId> |
Mavenプロジェクトの識別ID |
<version> |
プログラムのバージョン情報 |
<properties> |
POMファイルで利用する各種プロパティ(属性)の親タグ |
<dependencies> |
プログラムが利用する依存ライブラリ(=<dependency>タグ)の親タグ |
<dependency> |
依存ライブラリ毎に設定する各種プロパティ(属性)の親タグ |
<scope> |
依存ライブラリの適用範囲(スコープ) |
標準フォルダ構造
Mavenが定めるフォルダ構造は、以下の通り。
また、srcフォルダ内の配置図は以下の通り。
Maven標準コマンド
# Homebrewを通じたMavenのインストール
% brew install maven
# Mavenのバージョン情報の出力
% mvn --version
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
...
# Mavenプロジェクトのコンパイル
% mvn compile
# MavenプロジェクトのJARファイルを生成
% mvn package
# MavenプロジェクトのJavadocの生成
% mvn javadoc:javadoc
# Mavenプロジェクトの公開用Webサイトの生成
% mvn site
# Mavenプロジェクトの一時ファイル(targetフォルダ)を削除
% mvn clean
用語集
| 用語 | 内容 |
|---|---|
| マニフェストファイル(manifest file) |
JARファイルに含まれる、各クラスファイルの説明文を表すテキストファイル。 |
| ガベージコレクション(GC; Garbage Collection) |
ヒープ領域の圧迫時に、どの変数にも参照されないインスタンスを解放すること。 |
| メモリリーク(memory leak) | プログラムの不備によって生じる、ガベージコレクション対象が解放されない現象。 |
| インタプリタ言語(interpreter language) |
PythonやJavaScriptで採用される、ソースコードを1行ずつ変換・実行する言語。 |
| コンパイル言語(compile language) |
Javaなどで採用される、ソースファイル全体を読み込んでから変換・実行する言語。 |
| REPL(read-eval-print-loop) | ソースコードを対話的に実行できる開発ツールの総称。 |
| 完全限定成果物名(FQAN; fully-qualified artifact name) |
グループID・アーティファクトID・バージョン番号の3つを:(コロン)で連結することで一意なプログラムとした命名規則。 |
| セマンティックバージョニング(semantic versioning) |
バージョン番号を<メジャーバージョン>.<マイナーバージョン>.<パッチバージョン>で表す採番方法。 |
| モジュール(module) |
パッケージの集約単位。 |

