Edited at

JDKのbinフォルダに入っているツールをまとめてみた

More than 3 years have passed since last update.


シリーズ一覧

第1回:JDKのbinフォルダに入っているツールをまとめてみた

第2回:JDKのbinフォルダに入っているツールをまとめてみた 〜 セキュリティ

第3回:JDKのbinフォルダに入っているツールをまとめてみた 〜 国際化


JDKってサイトから落としてきてパスを通すくらいで、中身をじっくり見たことないなー、、、

ということで、JDK の bin フォルダの中に含まれているツールたちについて、少し調べてみたのでまとめます。

基本的には、以下の公式リファレンスのまとめのような感じです。

Java Platform, Standard Editionツール・リファレンス

※上記ページの「Javaアプリケーションの作成と構築」に始まり「セキュリティ」「国際化」「RMI」等、全てのツールをこの記事でまとめようと思ったのですが、ちょっと時間がかかりすぎるのと、記事が長くなりすぎるので、今回は「Javaアプリケーションの作成と構築」の項目のみ記載します。


Javaアプリケーションの作成と構築


appletviewer

appletviewerはWebブラウザを使わずにAppletの動作確認ができる開発ツールです。

Appletは通常Webブラウザ上で動作しますが、Appletプログラムをブラウザ上で動作させるには、WebブラウザがJavaを読み込めるようJREをインストールする必要があったり、ブラウザのキャッシュ等の設定を気にしなければならなかったり、なにかとブラウザの事情で開発がうまく進められないことがあります。

開発時はこのツールを使うことによって、ブラウザの事情に左右されることなく自分のプログラムの動作確認ができます。


参考

https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/appletviewer.html


extcheck

JREの lib/ext ディレクトリ内に含まれる拡張機能JARファイルと、実行時に指定した同名のJARファイルのバージョンの競合状況をチェックするツールです。

詳しい使い方や使いどころはちょっと調べられず。。。以上です。

どなたか詳しい方いらっしゃいましたらコメントいただけるととても助かります!


参考

https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/extcheck.html


jar

これはよく使いますね。Javaのアーカイブ(JAR)を作成したり更新したりするためのツールです。

例: dest/jp/co/chooya ディレクトリ内にある全てのクラスファイルをアーカイブし、test.jarファイルを作成

$ jar cf test.jar dest/jp/co/chooyan/*.class

アーカイブを作成する際のオプションによって、デフォルトのmainクラスを設定したり(e)、実行時のJVMオプションを設定できたり(-Joption)します。

参考

https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/jar.html


java

こちらも説明の必要は無いかと思います。

コンパイルされた.classファイルをJVM上で実行するためのコマンドです。


参考

https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/java.html


javac

Javaのソースファイルをコンパイルし、.classファイルを生成するためのコマンドです。

Eclipse等のIDEを使っているとあまり目にする機会はないかもしれませんが、コマンドラインでJavaをコーディングして実行する際には必ず必要になるコマンドです。

例:jp/co/chooyanディレクトリの全てのJavaファイルと、関連するJavaファイルをコンパイルし、生成されたクラスファイルを bin ディレクトリに保存

$ javac -d bin jp/co/chooyan/*.java


参考

https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/javac.html#BHCBDCJI


javadoc

ソースコード内に記載されたjavadocを読み取り、HTMLのAPIリファレンスページを作成します。

ちゃんとjavadocを書いておくと、Java API リファレンスのようなきれいなHTMLページで出力してくれるので、結構便利です。

例: jp/co/chooyan/ディレクトリ内の全てのjavaファイルのjavadocページを作成する

$ javadoc jp.co.chooyan jp/co/chooyan/*.java


参考

https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/javadoc.html#CHDIBDDD


javah

JavaのソースコードからC言語のヘッダファイルを生成します。

JNIを使ったC言語のプログラムとの連携の際に使用され、


  1. Javaで、C言語で実装するプログラムのインターフェイスを定義

  2. javah によってC言語のヘッダファイルを生成

  3. 生成されたヘッダファイルに従ってC言語で実装

  4. C言語のソースファイルをコンパイル

  5. JavaからC言語の実装を呼び出し

という感じで使うようです。


参考

https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/javah.html


javap

コンパイル済みのクラスファイルを逆アセンブルするツールです。

例:jp.co.chooyan.Personクラスを逆アセンブルする

$ javap bin/jp/co/chooyan/Person.class

Compiled from "Person.java"
public class jp.co.chooyan.Person {
public jp.co.chooyan.Person(java.lang.String, int);
public java.lang.String getName();
public void setName(java.lang.String);
public int getAge();
public void setAge(int);
}

-vオプションを付けるとさらに詳細な情報が出力されます。


参考


jdb

Javaプログラムをデバッグ実行するためのツールです。

普段はEclipse等、統合開発環境のデバッグツールを使うことが多いのですが、実はコマンドライン上でもこのツールを使用することでデバッグが可能です。

例:jp.co.chooyan.MainExecutor をデバッグ実行する。

$ jdb -classpath bin jp.co.chooyan.MainExecutor

jdbを実行すると、対話形式でプログラムの進行を制御できるようになります。

統合開発環境と同じく、ステップ実行したり、ブレークポイントを張ったり、変数(プリミティブ型もオブジェクト型も)の値を出力したり、といったことがコマンドライン上で操作できます。

特にブレークポイントは「○○クラスの何行目」という指定だけでなく、「○○クラスの××メソッドの最初のステップ」のように、行数や場所がすぐにわからない場合でも狙った場所に張ることができるため、IDEで行を狙ってブレークポイントを張るよりも使いやすい場合があったりします。


参考

https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/jdb.html


apt

apt(Annotation Processing Tool)は、Javaソースファイルのコンパイル時に予めプログラマーが定義したアノテーションとチェックロジックに従ってソースコードをチェックするツールです。

元々はjavacのラッパーとしてJDK 5 で登場したらしいのですが、現在は逆に javac が apt を取り込む形で apt は deprecated となり、常に javac を使うようになったようです。(確かにJava8のドキュメントや bin ディレクトリには apt は出てきません)


参考



  • http://www.javalobby.org/java/forums/t17876.html


    • そもそもaptとは、みたいなところが分かりやすく書かれています。2002年の、aptが廃止される前の記事ではありますが、コンパイル時にチェックするタイプのアノテーションを理解するのに有用だと思うので、リンクを載せておきます。




  • http://docs.oracle.com/javase/7/docs/technotes/guides/apt/


    • Java7のドキュメントに書かれている apt の説明です。廃止された旨もここに書いてあります。




まとめ

調べてみて、IDEやサードパーティのツールだけでなく、Oracleからデフォルトで提供されているツールの中にも使えるものがあったり、おまじないのように使っていたコマンドの役目が分かったりと、いろいろと発見がありました。

中には自分の開発分野では絶対に使わなそうなものもあったりしましたが(applet関連のツールとか)、引き出しとして知っておくだけでも何かの役に立つかな、という漠然とした感想です。

引き続き、他のツールについても調べてまとめたいと思います。