LoginSignup
28
28

More than 5 years have passed since last update.

jarコマンドを使ってjarファイル、warファイルを作る方法

Last updated at Posted at 2017-06-24

jarコマンドでjarファイル、warファイルを作る方法

メモしておきます。
サンプルを作った環境はWindows 10です。

jarファイルを作る方法

サンプルのソースファイルは以下の通り。

App.java
package sample;
public class App {
    public static void main(String[] arg) {
        System.out.println("Hello World!");
    }
}

ディレクトリ構造は以下の通り。classesフォルダーにはコンパイル後に.classファイルが配置されます。META-INF配下にはjarに取り込むマニュフェストファイルを配置しています。

C:\jarファイル作成サンプル>tree /F
フォルダー パスの一覧:  ボリューム OS
ボリューム シリアル番号は XXXX-XXXX です
C:.
├─classes
├─META-INF
│      MANIFEST.MF
│
└─src
    └─sample
            App.java

マニュフェストファイルにはjarを実行した時にmainメソッドが実行されるJavaクラスを指定してます。

MANIFEST.MF
Main-Class: sample.App

それでは、jarを作成する前にコンパイルを行いましょう。javacコマンドでコンパイルを行います。
-sourcepathでソースファイルが配置されているフォルダを指定します。
-dでコンパイル後のファイルが配置されるフォルダを指定します。

javac -sourcepath src -d classes src\sample\App.java

コンパイルを行うとclassesフォルダの配下に.classファイルが作成されます。

C:\jarファイル作成サンプル>tree /F
フォルダー パスの一覧:  ボリューム OS
ボリューム シリアル番号は XXXX-XXXX です
C:.
├─classes
│  └─sample
│          App.class
│
├─META-INF
│      MANIFEST.MF
│
└─src
    └─sample
            App.java

次にjarコマンドを使ってjarファイルを作成します。
mでjarファイルに取り込むマニュフェストファイルを指定してます。
-Cで指定したフォルダの配下が圧縮され、jarファイルに取り込まれます。

jar cvfm sample.jar META-INF\MANIFEST.MF -C classes .

作成されたjarファイルの構成は以下の通りとなります。

C:\jarファイル作成サンプル>jar tf sample.jar
META-INF/
META-INF/MANIFEST.MF
sample/
sample/App.class

実行結果は以下の通りです。

C:\jarファイル作成サンプル>java -jar sample.jar
Hello World!

warファイルを作る方法

サンプルのソースファイルは以下の通り。

SampleServlet.java
package sample;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/sample")
public class SampleServlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        resp.setCharacterEncoding("UTF-8");
        ServletOutputStream out = resp.getOutputStream();
        out.println("Hello World!");
        out.flush();
    }
}

ディレクトリ構造は以下の通り。WebContent\WEB-INF\classesフォルダーにはコンパイル後に.classファイルが配置されます。lib配下には上記ソースファイルをコンパイルするために必要なライブラリを配置しています。

C:\warファイル作成サンプル>tree /F
フォルダー パスの一覧:  ボリューム OS
ボリューム シリアル番号は XXXX-XXXX です
C:.
├─lib
│      javax.servlet-api-3.1.0.jar
│
├─src
│  └─sample
│          SampleServlet.java
│
└─WebContent
    └─WEB-INF
        └─classes

それでは、warを作成する前にコンパイルを行いましょう。javacコマンドでコンパイルを行います。
-sourcepathでソースファイルが配置されているフォルダを指定します。
-classpathでライブラリを指定しています。*を使用することでlibフォルダ配下の全てのファイルを指定できます。
-dでコンパイル後のファイルが配置されるフォルダを指定します。

javac -sourcepath src -classpath lib\* -d WebContent\WEB-INF\classes src\sample\SampleServlet.java

コンパイルを行うとWebContent\WEB-INF\classesフォルダの配下に.classファイルが作成されます。

C:\warファイル作成サンプル>tree /F
フォルダー パスの一覧:  ボリューム OS
ボリューム シリアル番号は XXXX-XXXX です
C:.
├─lib
│      javax.servlet-api-3.1.0.jar
│
├─src
│  └─sample
│          SampleServlet.java
│
└─WebContent
    └─WEB-INF
        └─classes
            └─sample
                    SampleServlet.class

次にjarコマンドを使ってwarファイルを作成します。
-Cで指定したフォルダの配下が圧縮され、warファイルに取り込まれます。

jar cvf sample.war -C WebContent .

作成されたwarファイルの構成は以下の通りとなります。

C:\warファイル作成サンプル>jar tf sample.war
META-INF/
META-INF/MANIFEST.MF
WEB-INF/
WEB-INF/classes/
WEB-INF/classes/sample/
WEB-INF/classes/sample/SampleServlet.class

作成されたwarファイルをTomcat等にデプロイしてブラウザからアクセスするとHello World!と表示されます。

28
28
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
28
28