0
1

More than 3 years have passed since last update.

【Java発展学習11日目】標準的な開発ツール

Last updated at Posted at 2021-07-14

Javadoc

ソースコード → プログラム仕様書の自動生成を行う開発ツール。

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ファイルの生成
% 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ファイルのメインクラスを実行するコマンド。

Javaの実行
# メインクラスを含む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によるJavaの実行
% 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) macOSLinuxで利用される、ビルドコマンドを列挙することで順次実行を行うファイル
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が定めるフォルダ構造は、以下の通り。

プロジェクトフォルダ.png

また、srcフォルダ内の配置図は以下の通り。

srcフォルダ.png

Maven標準コマンド

Mavenのインストール〜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) PythonJavaScriptで採用される、ソースコードを1行ずつ変換・実行する言語。
コンパイル言語(compile language) Javaなどで採用される、ソースファイル全体を読み込んでから変換・実行する言語。
REPL(read-eval-print-loop) ソースコードを対話的に実行できる開発ツールの総称。
完全限定成果物名(FQAN; fully-qualified artifact name) グループIDアーティファクトIDバージョン番号の3つを
:(コロン)で連結することで一意なプログラムとした命名規則。
セマンティックバージョニング(semantic versioning) バージョン番号
<メジャーバージョン>.<マイナーバージョン>.<パッチバージョン>
で表す採番方法。
モジュール(module) パッケージの集約単位。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1