【Java】【Eclipse】 Jarファイルについて

■ Jar (Java Archive) ファイルとは

 * Javaクラス・パッケージを1つのファイルにZIP圧縮したもの

■ Jarコマンド

 * Jarファイルを作成するためのJarコマンドは、JDKに用意されている

構文

* 最後のドット必要です
jar 【Jarコマンドのオプション】 【圧縮したいJarファイル名】 -C 【圧縮する対象ディレクトリ】 .

jar cvf XXXX.jar -C C:\test\ .

Jarコマンドのオプション

 * c : アーカイブを新規作成する
 * t : アーカイブの内容を一覧表示する
 * x : 指定の(またはすべての)ファイルをアーカイブから抽出する
 * u : 既存アーカイブを更新する
 * v : 標準出力に詳細な出力を生成する
 * f : アーカイブファイル名を指定する
 * m : 指定のマニフェストファイルからマニフェスト情報を取り込む
 * O : 格納のみ.ZIP 圧縮を使用しない
 * M : エントリのマニフェストファイルを作成しない
 * i : 指定の jar ファイルのインデックス情報を生成する
 * C : 指定のディレクトリに変更し,以下のファイルを取り込む

参考資料

http://shot.nobody.jp/java_basic/jar.html#compress

■ Jarファイル作成方法

Jarコマンドで生成する手順(Eclipseを使用しない方法)

[1] コマンドプロンプトで、コンパイルし、クラスファイルを作成する
# Javaコンパイル
javac *.java
[2] Jarファイルとして、まとめる
# Jar作成
# 構文 : jar [オプション] [Jarファイル名(任意)] [Jarにする対象ファイル]
jar cvf Sample.jar *.class
[3] Jarファイルを解凍する(META-INF\MANIFEST.MFができる)
jar xvf Sample.jar
[4] マニフェストファイル(MANIFEST.MFファイル)の修正
 * マニフェストファイル(MANIFEST.MFファイル)を、テキストエディタで開き、
   最後の一行に「Main-Class: Sample」を追記する
[5] 作成したマニフェストファイルを加えて、jarファイルにまとめなおす
jar cvfm Sample.jar META-INF\MANIFEST.MF *.class
[6] 実行するために、以下のコマンドする
java -jar Sample.jar Main

サンプル

SampleJar.java
package com;

public class SampleJar {
   public int add(int value1, int value2) {
      return value1 + value2;
   }
}
Main.java
package com;

public class Main {
   public static void main(String[] args) {
      SampleJar jar = new SampleJar();
      System.out.println("Result " + jar.add(2, 3) + " from jar");
   }
}
フォルダ構成
C:\Sample
 + com
    + SampleJar.java
    + Main.java
コマンド
# 以下、コマンドプロンプトで実行する

# Sampleまで移動
cd C:\Sample

# Jarになるクラスをコンパイル
javac com\SampleJar.java

# jar作成
jar cvf SampleJar.jar com/*.class

# Jarを使用するクラスをコンパイル
javac -cp SampleJar.jar com\Main.java

# Javaを実行
java com/Main

[2] Eclipseを使用する方法

2-a) JARファイルを出力する
 [1] パッケージを右クリック
 [2] メニューから エクスポート を選択
 [3]  [Java]-[JAR file]を選択し、「Next」ボタン
 [4]  「Jar file」にJarファイル名を入力し、「Finish」ボタン
参考文献
http://sunjava.seesaa.net/article/57546363.html

2-b) Ant(build.xml)でJARファイルを出力する
 [1] Eclipseで、[File]-[Export]-[General]-[Ant Buildfiles]を選択し、該当のプロジェクトを選択し
  「build.xml」を自動生成する
 [2] 手順[1] の「build.xml」を修正する(内容は以下を参照のこと)

~~~~
<?xml version="1.0" encoding="UTF-8"?>
<project name="javahelloant" default="jar" basedir=".">
    <property name="src.dir" value="src"/>
    <property name="classes.dir" value="classes"/>
    <property name="javadoc.dir" value="docs"/>
    <property name="jar.name" value="HollowWorld.jar"/>
    <property name="jar.dir" value="lib"/>
    <path id="class.path">
        <fileset dir="${jar.dir}" includes="*.jar"/>
    </path>
    <target name="compile">
        <mkdir dir="${classes.dir}"/>
        <javac debug="true" includeAntRuntime="true" srcdir="${src.dir}" destdir="${classes.dir}">
            <classpath refid="class.path"/>
        </javac>
    </target>
    <target name="jar" depends="compile">
        <jar jarfile="${jar.name}" basedir="${classes.dir}"/>
    </target>
    <target name="javadoc">
        <mkdir dir="${javadoc.dir}"/>
        <javadoc destdir="${javadoc.dir}" classpathref="class.path">
            <fileset dir="${src.dir}"/>
        </javadoc>
    </target>
    <target name="clean">
        <delete dir="${classes.dir}"/>
        <delete dir="${javadoc.dir}"/>
        <delete file="${jar.name}"/>
    </target>
</project>
~~~~

 [3] 手順[2] で修正した「build.xml」を右クリックし、[Run As]-[Ant Build]を選択
  ⇒すると、ビルドが成功すれば「lib」直下に「ObjectSizeFetcher.jar」ができるはず。
参考文献
http://www.hitachi.co.jp/Prod/comp/soft1/cosminexus/useful/tips/091204_eclipse-create-buildxml.html
http://husky.mydns.jp/huskysmemo/2010/02/jarbuildxml.html