MENU

[Java 初心者学習] ビルドツールについて / Eclipse で Maven プロジェクトを作成する方法-0007

Java開発では、ビルドツールの仕組みをベースに作成するのが主流です。Eclipseで1からプロジェクトを作る際も使われています。今では当たり前に使われているビルドツールですが、そもそもこのツールは何なのでしょうか。Eclipseを使って実際に「Mavenプロジェクト」を作成する方法と共にお伝えします。

  • ビルドツールがないと起きる2つの問題
  • ビルドツールがその問題を解決する
  • Eclipse で Maven プロジェクトを作成する方法

Maven などのビルドツールが導入される経緯を知ることで、どうしてこの設定をするのかを理解できるようになります。

目次

ビルドツールがないと起きる2つの問題

古い開発スタイルでは、外部のライブラリ (例: ログ出力用のJarや、DB接続用のJarなど) を使うために、手動でWebサイトからダウンロードしてEclipseのビルドパスに追加していました。

依存関係の地獄 (Dependency Hell)

あなたが「ライブラリA」を使いたいとします。しかし、ライブラリAを動かすためには「ライブラリB」が必要で、さらにライブラリBを動かすためには「ライブラリCのバージョン2.0」が必要である、といったように、ライブラリ同士が複雑に絡み合っています。これを手動ですべて調べて、正しいバージョンのJarファイルを1つずつ集めるのは、気の遠くなるような作業でした。これを依存関係の地獄といいます。

環境による「動かない」の発生 (Environment-specific issue / “It works on my machine” phenomenon )

「私のPCのEclipseでは動くのに、本番サーバーに持っていったらJarのバージョンが違っていて動かない」といったトラブルが頻発していました。プロジェクトの構成が「開発者のPC環境」に依存してしまっていたためです。

ビルドツールはこの2つの問題を解決するために使われています。

ビルドツールがその問題を解決する

Maven (メイヴン)Gradle (グレイドル) などのビルドツールは、これらの問題を鮮やかに解決します。 プロジェクトの中に1つだけ 「設定ファイル」 を用意し、そこに「このライブラリのバージョンXを使いたい」とテキストで記述するだけで終わりです。Javaでは Mavenと Gradleがシェアを二分しています。「Spring Boot 3.x」は、MavenとGradleのどちらにも対応しています。

Maven 設定を XML 形式で書きます。ルールが非常に厳格で、誰が書いても同じ構造になるため、日本のエンタープライズ (堅牢な企業システム) 開発や、歴史のあるプロジェクトでは今でも圧倒的なシェアを誇ります。
Gradle 設定を Groovy や Kotlin というプログラム言語の形式で書きます。Mavenよりも柔軟で、記述量が少なく、ビルドスピードが高速なため、比較的新しいモダンなプロジェクトや、スタートアップ、Android開発などで主流です。

Maven 設定例

たとえば、現代のJava開発で非常によく使われる「JSONを扱うためのライブラリ (Jackson)」を導入したい場合、Maven の設定ファイルである pom.xml に以下のようなコードを数行書き加えるだけです。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

これだけで、ビルドツールが以下の作業を裏側ですべて自動で行ってくれます。

自動ダウンロード インターネット上にある巨大な中央倉庫 (セントラルリポジトリ) から、指定されたJarファイルを自動でダウンロードしてきます。
依存関係のイモづる式解決 そのライブラリが動くために必要な「別のライブラリ」も自動で判別し、一緒にダウンロードしてプロジェクトに組み込みます。
Eclipseへの同期 Eclipse側にも「このJarをビルドパスに通しておいたよ」と自動で通知します。

Gitなどのソースコード管理ツール側で、重いJarファイルを含める必要はありません。この「設定ファイル (テキスト)」だけを共有すれば、世界中どこのPCでも全く同じ開発環境がすぐに再現可能です。

Eclipse で Mavenプロジェクト を作成する方法

ここからは以下についてお伝えします。

  • Eclipse で Mavenプロジェクト を作成する方法
  • pom.xml にJava のバージョン設定を追加する方法
  • ライブラリの自動ダウンロード方法 (外部ライブラリの自動導入)
  • 自動導入されたライブラリを使ってみる

画面上部のメニューから [ファイル] -> [新規] -> [Mavenプロジェクト] を選択します。

「シンプルなプロジェクトの作成 (アーキタイプ選択のスキップ)」というチェックボックスが表示されたら、そこにチェックを入れて [次へ] をクリックしてください。

これにより、余計なサンプルファイルが作られない綺麗なプロジェクトになります

次の画面で、プロジェクトの「識別名」を決めるために以下の2項目を入力します。入力後、完了をクリックしてください。これで Eclipse のパッケージエクスプローラーに maven-sample というプロジェクトが作成されます。

グループ Id
(Group Id)
com.example 開発元を表す識別子。通常は会社のドメインなどを逆順にしたものです。
アーティファクト Id
(Artifact Id)
maven-sample これがそのままプロジェクト名・フォルダ名になります

プロジェクトを作成すると、上記画像のようにいくつかのディレクトリが自動生成されます。各ディレクトリの説明は以下の通りです。

src/main/java 本番用のJavaソースコードを置く場所。実際にシステムを動かすためのJavaクラスは、すべてこの中にパッケージを作って配置します
src/main/resources 本番用の設定ファイルや画像などを置く場所。例えば、データベースの接続情報が書かれたプロパティファイル(.properties)や、WebアプリのHTMLテンプレート、XMLファイルなどがここに入ります。
src/test/java テスト用のJavaソースコードを置く場所。「自動テストコード(JUnit)」を置く専用の場所です。本番用のコードとは完全に分離されています。
src/test/resources テスト用の設定ファイルなどを置く場所。テストコードを実行するときだけ使用したい設定ファイルなどを置きます。
target/ ビルドされた成果物 (.classや.jar) が入る場所(自動生成)。Mavenがプログラムをコンパイルした結果が自動的に格納されるため、基本ここは触らない。
pom.xml Mavenの設定ファイル。POMは Project Object Model の略です。プロジェクトの名前、Javaのバージョン、そして使いたい外部ライブラリをここにテキストで記述します。

ちなみに pom.xml は以下のようになっています。(この記事ではグループIdを asia.sabay-sabay と入力)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>asia.sabay-sabay</groupId>
  <artifactId>maven-sample</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</project>

Maven プロジェクトの設定ファイルにJava のバージョン設定を追加する方法

たとえば、Maven プロジェクトの設定ファイル pom.xml に Java 21 の設定を追加するには、以下のように記述してください。この記述は「このプロジェクトはJava 21で動かします」という宣言を pom.xml に書き加えるということです。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>asia.sabay</groupId>
  <artifactId>maven-sample</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <!-- ここから追記 -->
  <properties>
    <maven.compiler.source>21</maven.compiler.source>
    <maven.compiler.target>21</maven.compiler.target>
  </properties>
  <!-- ここまで追記 -->
  
</project>

groupId には後々、パッケージ名として使えなくなるので – “ハイフン”を使わないようにした方がよいでしょう。(画像ではハイフン使っています。ごめんなさい)

追記して保存したあと、プロジェクトを右クリックして [Maven] -> [プロジェクトの更新…] を行い、[OK] をクリックしてください。これでEclipse側にもJava 21の設定が同期されます。

ライブラリの自動ダウンロード方法 (外部ライブラリの自動導入)

  <!-- さきほどの Java 21 設定 -->
  <properties>
    <maven.compiler.source>21</maven.compiler.source>
    <maven.compiler.target>21</maven.compiler.target>
  </properties>

  <!-- ここからさらに追記 -->
  <dependencies>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.5.6</version>
    </dependency>
  </dependencies>
  <!-- ここまで追記 -->

ここでは Java開発のログ出力のデファクトスタンダードである SLF4J と Logback というライブラリを導入します。pom.xml に依存関係を追記することで、ライブラリの自動ダウンロードを実現することが可能です。上記の <dependencies> ブロックを pom.xml に追記して保存してください。

保存またはプロジェクトの更新を行った瞬間に、Eclipseの画面右下で一瞬プログレスバーが動き、インターネットからJarファイルが自動ダウンロードされます。

保存後、パッケージ・エクスプローラー内にある 「Maven 依存関係 (Maven Dependencies)」 という仮想フォルダを開いてみてください。 logback-classic を指定するだけで、それが必要とする logback-core や slf4j-api といった関連するJarファイルまで自動で集められているのが確認できるはずです。

自動導入されたライブラリを使ってみる

ここでは上記で導入した SLF4J, Logback という2つのライブラリが使えるかどうかを試してみます。まず、src/main/java を右クリックして [新規] -> [クラス] を選択します。

パッケージ名にグループIDで指定した値、クラス名に Main と入力し、public static void main のチェックを入れて [完了] を押してください。

package asia.sabay;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    // ログ出力用のインスタンスを生成(現代Javaの標準的なロガー定義)
    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) {
        var message = "Mavenによるライブラリ導入に成功しました!!";
        
        // Java 8時代までのSystem.out.printlnの代わりに、ロガーを使います
        logger.info("現在のメッセージ: {}", message);
    }
}

新規に作成されたMain.javaに、上記のように記述してください。パッケージ名はご自身で設定したものを入力してください。実行後、コンソールに時間・実行スレッド名とログが出力されれば、Maven開発環境の構築と実践は無事に成功です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次