1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java】Mavenビルドの基本:pom.xmlの設定からjar/warができるまで

1
Posted at

はじめに

Java を学び始めると、package 宣言や pom.xml、ビルドして出てくる .jar / .war といった用語に出会います。最初はどれが何のためのものか分かりにくいと思います。

この記事では、packagepom.xmljarwar の4つについて、それぞれの役割と用途を整理します。ビルドツールは Maven を前提とします。

まず全体像

ざっくり言うと、それぞれの立ち位置は以下のようになります。

用語 種類 役割
package ソースコード上の仕組み クラスを名前空間で分類・整理する
pom.xml 設定ファイル プロジェクトの構成やライブラリ、ビルド方法を定義する
.jar 成果物(ファイル) 配布・実行できる形にまとめたもの(主にライブラリやアプリ)
.war 成果物(ファイル) Web アプリをサーバーにデプロイする形にまとめたもの

package はコードの書き方の話、pom.xml はビルドの設定の話、.jar / .war はビルドした結果できあがるファイルの話、という違いがあります。

package:クラスを整理する仕組み

package は、クラスをグループ分けして整理するための仕組みです。フォルダで書類を分類するイメージに近いと思います。

package com.example.app;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}

package com.example.app; と書くと、この Main クラスは com.example.app というパッケージに属することになります。同じ名前のクラスでもパッケージが違えば別物として扱えるので、名前の衝突を防げます。

パッケージ名はソースコードのディレクトリ構成とも対応します。上の例なら src/main/java/com/example/app/Main.java という場所に置きます。

パッケージ名は、自分が持っているドメインを逆順にした形(例:com.example)にする慣習があります。世界中で名前が重複しないようにするための工夫です。

pom.xml:プロジェクトの設計図

pom.xml は Maven というビルドツールが使う設定ファイルです。POM は「Project Object Model」の略で、プロジェクトに関する情報をまとめて書きます。

主に次のようなことを書きます。

  1. プロジェクトの名前やバージョン
  2. 使用するライブラリ(依存関係)
  3. 成果物の種類(jar にするか war にするか)
  4. ビルドの設定
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0">
  <modelVersion>4.0.0</modelVersion>

  <!-- プロジェクトを識別する情報 -->
  <groupId>com.example</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0.0</version>

  <!-- 成果物の種類(jar / war など) -->
  <packaging>jar</packaging>

  <!-- 使用するライブラリ -->
  <dependencies>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.14.0</version>
    </dependency>
  </dependencies>
</project>

特に便利なのが <dependencies> です。ここに使いたいライブラリを書いておくと、Maven が自動でダウンロードしてプロジェクトに組み込んでくれます。ライブラリの jar ファイルを手動で探してきて配置する、といった手間がなくなります。

<packaging> の値を jar にするか war にするかで、ビルド時にできあがる成果物の種類が変わります。

jar:実行・配布のためにまとめたファイル

.jar は「Java ARchive」の略で、コンパイル済みのクラスファイル(.class)や設定ファイルなどを1つにまとめた成果物です。中身は ZIP 形式の圧縮ファイルになっています。

jar には主に2つの使われ方があります。

使われ方 説明
ライブラリとして 他のプロジェクトから部品として読み込んで使う
実行可能ファイルとして java -jar コマンドで直接アプリを起動する

実行可能な jar は、次のように動かせます。

java -jar my-app.jar

クラスファイルが何十個もあると配布や実行が大変ですが、jar に固めておけばファイル1つで扱えます。pom.xml<packaging>jar にした場合、mvn package を実行すると jar が作られます。

mvn package

war:Web アプリをサーバーに置くためのファイル

.war は「Web Application ARchive」の略で、Web アプリケーションを1つにまとめた成果物です。jar と同じく ZIP 形式ですが、Web アプリ向けに決まった構成を持っている点が違います。

war には、クラスファイルに加えて HTML や CSS、JSP、web.xml などの Web アプリに必要なファイルが含まれます。

war は単体では動かず、Apache Tomcat のような サーブレットコンテナ(Web サーバー) に配置(デプロイ)して動かします。

pom.xml<packaging>war にすると war が作られます。

pom.xml
<packaging>war</packaging>

最近の Spring Boot などでは、Tomcat を内蔵した実行可能 jar として作り、java -jar で直接起動するスタイルも増えています。そのため「Web アプリ=必ず war」というわけではありません。従来型のサーバーにデプロイする場合に war を使う、と考えるとよいと思います。

jar と war の違いの整理

混同しやすい jar と war を並べて整理します。

観点 jar war
正式名称 Java ARchive Web Application ARchive
主な用途 ライブラリ、または単体実行アプリ Web アプリ
動かし方 java -jar で実行、または部品として読み込む サーブレットコンテナにデプロイ
含まれるもの クラスファイル、設定ファイル クラスファイル+HTML/CSS/JSP など Web 用ファイル

まとめ

この記事では packagepom.xmljarwar の役割を整理しました。

  • package はクラスを名前空間で整理する仕組み、ソースコードの書き方の話
  • pom.xml は Maven の設定ファイル、依存ライブラリや成果物の種類を定義する設計図
  • .jar はクラスなどをまとめた成果物、ライブラリや実行可能アプリとして使う
  • .war は Web アプリをまとめた成果物、サーブレットコンテナにデプロイして動かす

参考

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?