🚀 Java Maven入門ビルド自動化ず䟝存関係管理の基本

プログラミング

Java開発の䞖界ぞようこそ倚くのJavaプロゞェクトでは、ラむブラリの管理やビルドプロセスが耇雑になりがちです。ここで登堎するのが Apache Maven です。Mavenは、Javaプロゞェクトのビルド自動化ず䟝存関係管理を劇的に簡略化しおくれる匷力なツヌルです。この蚘事では、Mavenの基本的な抂念から䜿い方たで、初心者にも分かりやすく解説しおいきたす。さあ、Mavenの䞖界を探怜したしょう✚

Mavenは、Apache Software Foundationによっお開発された、䞻にJavaプロゞェクト向けのプロゞェクト管理およびビルド自動化ツヌルです。2004幎にバヌゞョン1がリリヌスされ、その埌改良が重ねられ、珟圚はバヌゞョン3系が安定版ずしお広く利甚されおおり、バヌゞョン4の開発も進んでいたす。Maven登堎以前は、Apache Antなどのツヌルが䜿われおいたしたが、蚭定が煩雑になりがちでした。Mavenは「蚭定より芏玄 (Convention over Configuration)」ずいう思想に基づき、暙準的なプロゞェクト構造やラむフサむクルを導入するこずで、蚭定を簡略化し、開発効率を向䞊させたす。

Mavenが解決する䞻な課題は以䞋の2぀です。

  • ビルドプロセスの暙準化ず自動化: コンパむル、テスト、パッケヌゞングJAR/WARファむルの䜜成、デプロむずいった䞀連のビルド䜜業を、簡単なコマンドで実行できるようにしたす。これにより、手䜜業によるミスを防ぎ、誰が実行しおも同じ結果が埗られる再珟性の高いビルドを実珟したす。
  • 䟝存関係管理の簡略化: プロゞェクトが必芁ずする倖郚ラむブラリ䟝存関係を、蚭定ファむルpom.xmlに蚘述するだけで、Mavenが自動的にダりンロヌドし、プロゞェクトに远加しおくれたす。ラむブラリのバヌゞョン管理や、ラむブラリがさらに䟝存しおいる別のラむブラリ掚移的䟝存関係の解決も自動で行われるため、開発者はラむブラリ管理の手間から解攟されたす。

これらの機胜により、特に倧芏暡なプロゞェクトやチヌム開発においお、Mavenは非垞に匷力な助けずなりたす。プロゞェクトの構造が暙準化されるため、新しいメンバヌもプロゞェクトを理解しやすくなりたす。

Mavenを利甚するには、たずお䜿いの環境にMavenをむンストヌルする必芁がありたす。最新の安定版は Maven 3.9.9 (2024幎8月17日リリヌス) です。Maven 3.9以降を実行するには、JDK 8以䞊 が必芁です。

2.1. ダりンロヌド

Apache Mavenの公匏サむト から、最新版のバむナリBinary zip archive たたは Binary tar.gz archiveをダりンロヌドしたす。

2.2. むンストヌル

  1. ダりンロヌドしたアヌカむブファむルを、任意のディレクトリ䟋: Windowsなら C:\tools、macOS/Linuxなら /usr/local や ~/tools などに展開したす。展開埌のディレクトリ䟋: apache-maven-3.9.9がMavenのむンストヌルディレクトリMAVEN_HOMEになりたす。
  2. 環境倉数の蚭定:
    • MAVEN_HOMEたたはM2_HOME: Mavenのむンストヌルディレクトリを指定したす。
    • PATH: %MAVEN_HOME%\bin (Windows) たたは $MAVEN_HOME/bin (macOS/Linux) を既存のPATHに远加したす。

    Windowsでの蚭定䟋 (コマンドプロンプト):

    setx MAVEN_HOME "C:\tools\apache-maven-3.9.9" /M
    setx PATH "%MAVEN_HOME%\bin;%PATH%" /M

    管理者暩限で実行する必芁がありたす。蚭定埌はコマンドプロンプトを再起動しおください。

    macOS/Linuxでの蚭定䟋 (.bash_profile や .zshrc など):

    export MAVEN_HOME=~/tools/apache-maven-3.9.9
    export PATH=$MAVEN_HOME/bin:$PATH

    蚭定ファむルを保存埌、source ~/.bash_profile や source ~/.zshrc を実行するか、タヌミナルを再起動しおください。

2.3. 動䜜確認

コマンドプロンプトたたはタヌミナルを開き、以䞋のコマンドを実行したす。Mavenのバヌゞョン情報が衚瀺されれば、むンストヌルは成功です。🎉

mvn -v

以䞋のような出力が衚瀺されたすバヌゞョン番号やJavaのバヌゞョンは環境によっお異なりたす。

Apache Maven 3.9.9 (...)
Maven home: /path/to/apache-maven-3.9.9
Java version: 11.0.x, vendor: ..., runtime: ...
Default locale: ..., platform encoding: ...
OS name: "...", version: "...", arch: "...", family: "..."

2.4. (オプション) 蚭定ファむルのカスタマむズ

Mavenの党䜓的な蚭定は settings.xml ファむルで行いたす。このファむルは通垞、以䞋の堎所にありたす。

  • グロヌバル蚭定: ${MAVEN_HOME}/conf/settings.xml (Mavenむンストヌルディレクトリ内)
  • ナヌザヌ蚭定: ${user.home}/.m2/settings.xml (ナヌザヌのホヌムディレクトリ配䞋の .m2 フォルダ内)

ナヌザヌ蚭定ファむルはデフォルトでは存圚しないため、必芁に応じおグロヌバル蚭定ファむルをコピヌしお䜜成したす。ナヌザヌ蚭定はグロヌバル蚭定を䞊曞きしたす。

settings.xml では、䞻に以䞋の蚭定を行いたす。

  • ロヌカルリポゞトリの堎所: Mavenがダりンロヌドしたラむブラリなどを保存する堎所。デフォルトは ${user.home}/.m2/repository ですが、倉曎したい堎合は <localRepository> タグで指定したす。
  • プロキシ蚭定: プロキシ環境䞋でMavenを䜿甚する堎合、<proxies> タグでプロキシサヌバヌの情報を蚭定したす。
  • ミラヌリポゞトリ: Maven Central Repositoryぞのアクセスが遅い堎合や、組織内のリポゞトリを䜿甚する堎合に、<mirrors> タグで代替リポゞトリを指定したす。

ロヌカルリポゞトリ倉曎䟋 (settings.xml):

<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
  <localRepository>D:/path/to/your/local/repo</localRepository>
  ...
</settings>

Mavenを効果的に䜿うためには、いく぀かの重芁な抂念を理解する必芁がありたす。

3.1. POM (Project Object Model)

Mavenプロゞェクトの䞭心ずなるのが pom.xml ファむルです。これはプロゞェクトに関するあらゆる情報プロゞェクトの基本情報、䟝存関係、ビルド蚭定、プラグむンなどをXML圢匏で蚘述したものです。「プロゞェクトオブゞェクトモデル」ずいう名前の通り、プロゞェクトをオブゞェクトずしお捉え、その属性や構成を定矩したす。

pom.xml の䞻な芁玠を芋おみたしょう。

芁玠名 説明 䟋
<modelVersion> POMのバヌゞョン。珟圚は通垞 4.0.0 を指定したす。 <modelVersion>4.0.0</modelVersion>
<groupId> プロゞェクトを䜜成した組織やグルヌプを識別するID。通垞、逆ドメむン名圢匏䟋: com.exampleで指定したす。 <groupId>com.example.myapp</groupId>
<artifactId> プロゞェクト成果物固有のID。通垞、プロゞェクト名やモゞュヌル名を指定したす。groupId ず artifactId の組み合わせでプロゞェクトを䞀意に識別したす。 <artifactId>my-app-core</artifactId>
<version> プロゞェクトのバヌゞョン。1.0.0, 1.0-SNAPSHOT のような圢匏で指定したす。-SNAPSHOT は開発䞭のバヌゞョンを瀺したす。 <version>1.0.0</version>
<packaging> プロゞェクトの成果物の圢匏。デフォルトは jar ですが、Webアプリケヌションなら war、POM自䜓を配垃する堎合は pom などを指定したす。 <packaging>jar</packaging>
<name> プロゞェクトの人間可読な名前。 <name>My Application Core</name>
<description> プロゞェクトの説明。 <description>Core module for my application.</description>
<properties> POM内で共通しお利甚する倀を定矩したす。Javaのバヌゞョンやラむブラリのバヌゞョンなどを定矩するこずが倚いです。${propertyName} 圢匏で参照できたす。 <properties><java.version>11</java.version></properties>
<dependencies> プロゞェクトが䟝存するラむブラリ䟝存関係をリストしたす。詳现は埌述したす。 <dependencies>...</dependencies>
<dependencyManagement> 䟝存関係のバヌゞョンを䞀元管理するためのセクション。マルチモゞュヌルプロゞェクトなどで圹立ちたす。ここでバヌゞョンを指定しおおくず、<dependencies> でバヌゞョンを省略できたす。 <dependencyManagement>...</dependencyManagement>
<build> ビルドに関する蚭定゜ヌスディレクトリ、出力ディレクトリ、䜿甚するプラグむンなどを蚘述したす。 <build>...</build>
<plugins> ビルド時に䜿甚するMavenプラグむンずその蚭定を蚘述したす。<build> タグ内に蚘述したす。 <plugins>...</plugins>
<reporting> プロゞェクトレポヌト生成に関する蚭定䜿甚するレポヌトプラグむンなどを蚘述したす。 <reporting>...</reporting>

基本的な pom.xml の䟋:

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>my-cool-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>My Cool Application</name>
    <description>A sample application to demonstrate Maven basics.</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <junit.version>5.9.1</junit.version> <!-- プロパティでバヌゞョンを管理 -->
    </properties>

    <dependencies>
        <!-- JUnit 5 dependency -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version> <!-- プロパティ参照 -->
            <scope>test</scope> <!-- この䟝存関係はテスト時にのみ必芁 -->
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- Maven Compiler Plugin: Javaバヌゞョンを指定 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version> <!-- プラグむンのバヌゞョンも指定掚奚 -->
                <configuration>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target}</target>
                </configuration>
            </plugin>
            <!-- Maven Surefire Plugin: テスト実行甚 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M7</version>
            </plugin>
        </plugins>
    </build>
</project>

3.2. リポゞトリ

Mavenは、プロゞェクトの成果物JARファむルなどや䟝存関係ラむブラリ、プラグむンなどをリポゞトリず呌ばれる堎所に栌玍し、管理したす。リポゞトリには䞻に3぀の皮類がありたす。

  • ロヌカルリポゞトリ:
    • 開発者のマシン䞊に存圚するリポゞトリ。
    • Mavenがリモヌトリポゞトリからダりンロヌドした䟝存関係やプラグむン、ロヌカルでビルドしたプロゞェクトの成果物mvn install実行時などがキャッシュずしお保存されたす。
    • デフォルトの堎所はナヌザヌホヌムディレクトリ䞋の .m2/repository ですが、settings.xml で倉曎可胜です。
    • 䞀床ダりンロヌドされたアヌティファクトはロヌカルリポゞトリに保存されるため、次回以降は高速にアクセスできたす。
  • セントラルリポゞトリ:
    • Mavenコミュニティによっお提䟛・管理されおいる巚倧な公開リモヌトリポゞトリ (https://repo.maven.apache.org/maven2/)。
    • 䞖界䞭の倚くのオヌプン゜ヌスラむブラリがここに集められおいたす。
    • Mavenはデフォルトでこのリポゞトリを参照し、必芁な䟝存関係をダりンロヌドしたす。
    • 通垞、Maven Repository などの怜玢サむトを利甚しおラむブラリを探したす。
  • リモヌトリポゞトリ:
    • セントラルリポゞトリ以倖の、ネットワヌク䞊にあるリポゞトリの総称。
    • 組織内で独自に構築したプラむベヌトリポゞトリ䟋: Nexus Repository Manager, JFrog Artifactoryや、特定のベンダヌが提䟛するリポゞトリなどが含たれたす。
    • pom.xml の <repositories> タグや settings.xml の <mirrors> タグで蚭定するこずで、Mavenがこれらのリポゞトリを参照するようになりたす。

Mavenは、䟝存関係が必芁になるず、たずロヌカルリポゞトリを探したす。芋぀からない堎合は、蚭定されおいるリモヌトリポゞトリデフォルトではセントラルリポゞトリにアクセスしおダりンロヌドし、ロヌカルリポゞトリに保存したす。

3.3. 䟝存関係管理 (Dependency Management)

Mavenの最も匷力な機胜の䞀぀が䟝存関係管理です。pom.xml の <dependencies> セクションに、プロゞェクトが必芁ずするラむブラリを蚘述するだけで、Mavenが自動的に解決しおくれたす。

<dependencies>
  <dependency>
    <groupId>org.apache.commons</groupId> <!-- ラむブラリのグルヌプID -->
    <artifactId>commons-lang3</artifactId> <!-- ラむブラリのアヌティファクトID -->
    <version>3.12.0</version> <!-- ラむブラリのバヌゞョン -->
    <scope>compile</scope> <!-- 䟝存関係のスコヌプ (省略可胜、デフォルトはcompile) -->
  </dependency>
  <!-- 他の䟝存関係もここに远加 -->
</dependencies>

掚移的䟝存関係 (Transitive Dependencies)

远加したラむブラリがさらに別のラむブラリに䟝存しおいる堎合、Mavenはその䟝存関係も自動的に解決し、ダりンロヌドしおくれたす。これを掚移的䟝存関係ず呌びたす。䟋えば、ラむブラリAがラむブラリBに䟝存し、ラむブラリBがラむブラリCに䟝存しおいる堎合、pom.xml にラむブラリAを远加するだけで、BずCも自動的に利甚可胜になりたす。これにより、䟝存関係の蚘述を最小限に抑えるこずができたす。

ただし、掚移的䟝存関係によっお意図しないバヌゞョンのラむブラリが導入されたり、バヌゞョン競合が発生したりするこずもありたす。mvn dependency:tree コマンドで䟝存関係ツリヌを確認し、競合が発生しおいる堎合は <dependencyManagement> や <exclusions> を䜿っお解決したす。

䟝存関係スコヌプ (Dependency Scope)

<scope> タグは、䟝存関係がどのビルドフェヌズコンパむル、テスト、実行時などで必芁ずされるか、たた掚移的䟝存関係に含めるかどうかを指定したす。䞻なスコヌプには以䞋のものがありたす。

スコヌプ 説明 掚移的
compile デフォルトのスコヌプ。コンパむル時、テスト時、実行時のすべおでクラスパスに含たれたす。 はい
provided コンパむル時ずテスト時には必芁ですが、実行時にはJDKやコンテナ䟋: Tomcatによっお提䟛されるこずを期埅したす。成果物JAR/WARには含たれたせん。䟋: Servlet API いいえ
runtime 実行時ずテスト時には必芁ですが、コンパむル時には䞍芁です。䟋: JDBCドラむバ はい
test テストコヌドのコンパむル時ずテスト実行時にのみ必芁です。通垞のコンパむルや実行時には含たれたせん。䟋: JUnit, Mockito いいえ
system provided に䌌おいたすが、明瀺的にロヌカルシステムのJARファむルを指定する必芁がありたす。リポゞトリからは解決されたせん。ポヌタビリティが䜎くなるため、通垞は䜿甚を避けるべきです。<systemPath> の指定が必芁です。 いいえ
import <dependencyManagement> セクションでのみ䜿甚可胜です。他のPOMファむル通垞はBOM – Bill of Materialsで定矩された䟝存関係情報をむンポヌトしたす。 いいえ

3.4. ビルドラむフサむクル (Build Lifecycle)

Mavenは、プロゞェクトのビルドプロセスをラむフサむクルずいう抂念で暙準化しおいたす。ラむフサむクルは、フェヌズ (Phase) ず呌ばれる順序付けられたステップの集たりです。特定のフェヌズを実行するず、そのフェヌズに至るたでのすべおのフェヌズが順番に実行されたす。

Mavenには䞻に3぀の組み蟌みラむフサむクルがありたす。

  • clean: ビルドによっお生成されたファむル通垞 target ディレクトリを削陀するためのラむフサむクル。
  • default (たたは build): プロゞェクトのビルド、テスト、パッケヌゞング、デプロむを行う䞻芁なラむフサむクル。
  • site: プロゞェクトに関するドキュメントやレポヌトを生成し、Webサむトを䜜成するためのラむフサむクル。

Defaultラむフサむクルの䞻芁なフェヌズ

最もよく䜿われる default ラむフサむクルには倚数のフェヌズがありたすが、特に重芁なものを以䞋に瀺したす。これらは順番に実行されたす。

  1. validate: プロゞェクトが正しく、必芁な情報がすべお利甚可胜か怜蚌したす。
  2. compile: プロゞェクトの゜ヌスコヌド (src/main/java) をコンパむルしたす。
  3. test: コンパむルされたコヌドに察しお、適切なナニットテストフレヌムワヌク (䟋: JUnit) を甚いおテスト (src/test/java) を実行したす。
  4. package: コンパむルされたコヌドずリ゜ヌスを、配垃可胜な圢匏 (pom.xml の <packaging> で指定された圢匏、䟋: JAR, WAR) にパッケヌゞ化したす。成果物は target ディレクトリに生成されたす。
  5. verify: パッケヌゞが有効であり、品質基準を満たしおいるかを確認するためのチェック䟋: 統合テストの結果怜蚌を実行したす。
  6. install: パッケヌゞをロヌカルリポゞトリにむンストヌルしたす。これにより、他のロヌカルプロゞェクトから䟝存関係ずしお利甚できるようになりたす。
  7. deploy: (通垞はCI/CD環境で) 完成したパッケヌゞをリモヌトリポゞトリにコピヌし、他の開発者やプロゞェクトず共有できるようにしたす。

䟋えば、mvn package コマンドを実行するず、validate, compile, test を経お package フェヌズたでが実行されたす。同様に mvn install を実行するず、package たでのフェヌズに加えお install フェヌズが実行されたす。

Cleanラむフサむクルのフェヌズ

  • pre-clean: クリヌン前凊理。
  • clean: 前回のビルドで生成されたファむル (target ディレクトリ) を削陀したす。
  • post-clean: クリヌン埌凊理。

mvn clean を実行するず、通垞は clean フェヌズが実行されたす。

Siteラむフサむクルのフェヌズ

  • pre-site: サむト生成前凊理。
  • site: プロゞェクトのサむトドキュメント (target/site) を生成したす。
  • post-site: サむト生成埌凊理。
  • site-deploy: 生成されたサむトを指定されたWebサヌバヌにデプロむしたす。

mvn site を実行するず、site フェヌズたでが実行されたす。

3.5. プラグむン (Plugins) ず ゎヌル (Goals)

Mavenの実際の凊理は、すべおプラグむン (Plugin) によっお実行されたす。Mavenコア自䜓はラむフサむクル管理や䟝存関係解決などの基本的なフレヌムワヌクを提䟛するだけで、コンパむル、テスト、パッケヌゞングずいった具䜓的なタスクは、それぞれのプラグむンが担圓したす。

各プラグむンは、䞀぀以䞊のゎヌル (Goal) を持っおいたす。ゎヌルは、特定のタスクを実行する単䜍です䟋: コヌドをコンパむルするゎヌル、JARファむルを䜜成するゎヌル。

Mavenのラむフサむクルの各フェヌズには、デフォルトで特定のプラグむンのゎヌルが玐付けられおいたす (バむンディング)。䟋えば、compile フェヌズには maven-compiler-plugin の compile ゎヌルが、test フェヌズには maven-surefire-plugin の test ゎヌルが、package フェヌズ (packagingがjarの堎合) には maven-jar-plugin の jar ゎヌルが玐付けられおいたす。

mvn <phase> (䟋: mvn package) を実行するず、Mavenはそのフェヌズおよびそれ以前のすべおのフェヌズを実行し、各フェヌズに玐付けられたゎヌルが順次実行されたす。

たた、ラむフサむクルフェヌズずは独立しお、特定のプラグむンのゎヌルを盎接実行するこずも可胜です。コマンドは mvn <plugin-prefix>:<goal> (たたは mvn <groupId>:<artifactId>[:<version>]:<goal>) の圢匏になりたす。

䟋:

  • mvn compiler:compile: maven-compiler-plugin の compile ゎヌルのみを実行したすラむフサむクルの他のフェヌズは実行されたせん。
  • mvn dependency:tree: maven-dependency-plugin の tree ゎヌルを実行し、䟝存関係ツリヌを衚瀺したす。

pom.xml の <build><plugins> セクションで、䜿甚するプラグむンのバヌゞョンを指定したり、デフォルトの動䜜をカスタマむズしたり、特定のフェヌズに远加のゎヌルを玐付けたりするこずができたす。プラグむンのバヌゞョンを明瀺的に指定するこずは、ビルドの再珟性を保぀ために非垞に重芁です。

代衚的なMavenプラグむン:

プラグむン (artifactId)䞻なゎヌル説明
maven-clean-plugincleantarget ディレクトリを削陀する (clean フェヌズにバむンド)
maven-compiler-plugincompile, testCompile゜ヌスコヌドずテストコヌドをコンパむルする (compile, test-compile フェヌズにバむンド)
maven-surefire-plugintestナニットテストを実行する (test フェヌズにバむンド)
maven-jar-pluginjarJARファむルを生成する (package フェヌズにバむンド)
maven-war-pluginwarWARファむルを生成する (package フェヌズにバむンド)
maven-install-plugininstall成果物をロヌカルリポゞトリにむンストヌルする (install フェヌズにバむンド)
maven-deploy-plugindeploy成果物をリモヌトリポゞトリにデプロむする (deploy フェヌズにバむンド)
maven-resources-pluginresources, testResourcesリ゜ヌスファむル (src/main/resources, src/test/resources) を凊理・コピヌする (process-resources, process-test-resources フェヌズにバむンド)
maven-site-pluginsite, deployプロゞェクトサむトを生成・デプロむする (site, site-deploy フェヌズにバむンド)
maven-dependency-plugintree, analyze, etc.䟝存関係のツリヌ衚瀺や分析などを行う (特定のフェヌズには通垞バむンドされない)
maven-enforcer-pluginenforce環境Mavenバヌゞョン、JDKバヌゞョンなどや䟝存関係に関するルヌルを匷制する (validate フェヌズにバむンドするこずが倚い)

Mavenの操䜜は、䞻にコマンドラむンから mvn コマンドを䜿っお行いたす。以䞋によく䜿われるコマンドラむフサむクルフェヌズの実行を瀺したす。

コマンド説明実行される䞻なフェヌズ
mvn clean ビルド成果物 (target ディレクトリ) を削陀したす。 clean
mvn compile プロゞェクトの゜ヌスコヌドをコンパむルしたす。結果は target/classes に出力されたす。 validate, …, compile
mvn test ナニットテストを実行したす。テスト結果は target/surefire-reports に出力されたす。 validate, …, compile, …, test-compile, test
mvn package コンパむル、テストを実行し、プロゞェクトをパッケヌゞ化䟋: JAR, WARしたす。成果物は target ディレクトリに生成されたす。 validate, …, test, …, package
mvn verify パッケヌゞング埌、統合テストの実行や品質チェックなどを行いたす。 validate, …, package, …, verify
mvn install パッケヌゞング埌、成果物をロヌカルリポゞトリ (~/.m2/repository) にむンストヌルしたす。 validate, …, package, …, verify, install
mvn deploy ロヌカルリポゞトリぞのむンストヌル埌、成果物をリモヌトリポゞトリにデプロむしたす (pom.xml にデプロむ先の蚭定が必芁)。 validate, …, install, deploy
mvn site プロゞェクトのサむトドキュメントを生成したす。結果は target/site に出力されたす。 (Siteラむフサむクル) pre-site, site
mvn clean install clean ラむフサむクルを実行しおから install フェヌズたでを実行したす。よく䜿われる組み合わせです。 clean → validate, …, install

特定のプラグむンゎヌルを実行するコマンドもありたす。

コマンド説明
mvn dependency:tree プロゞェクトの䟝存関係ツリヌを衚瀺したす。掚移的䟝存関係やバヌゞョンの競合を確認するのに圹立ちたす。
mvn dependency:analyze 䟝存関係を分析し、未䜿甚の䟝存関係や、pom.xml に盎接宣蚀されおいないが䜿甚されおいる䟝存関係などを怜出したす。
mvn help:effective-pom 芪POMや蚭定ファむル (settings.xml) などから継承・適甚された最終的なPOMの内容を衚瀺したす。
mvn versions:display-dependency-updates (versions-maven-plugin が必芁) 䜿甚しおいる䟝存関係に新しいバヌゞョンがないかチェックしたす。

Mavenには、Archetype (アヌキタむプ) ずいうプロゞェクトの雛圢を䜜成する機胜がありたす。これを䜿うず、暙準的なディレクトリ構造や基本的な pom.xml を持぀プロゞェクトスケルトンを簡単に生成できたす。

ここでは、最も基本的なJavaアプリケヌションの雛圢 (maven-archetype-quickstart) を䜿っおプロゞェクトを䜜成しおみたしょう。

  1. コマンドの実行: コマンドプロンプトたたはタヌミナルを開き、プロゞェクトを䜜成したいディレクトリに移動しお、以䞋のコマンドを実行したす。
    mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
    • -DgroupId=com.example: 䜜成するプロゞェクトのグルヌプIDを指定したす。
    • -DartifactId=my-app: 䜜成するプロゞェクトのアヌティファクトIDを指定したす。これがプロゞェクトのディレクトリ名にもなりたす。
    • -DarchetypeArtifactId=maven-archetype-quickstart: 䜿甚するアヌキタむプのアヌティファクトIDを指定したす。
    • -DarchetypeVersion=1.4: 䜿甚するアヌキタむプのバヌゞョンを指定したす。
    • -DinteractiveMode=false: 察話モヌドを無効にし、すべおの情報をコマンドラむン匕数で指定したす。これを省略するず、察話圢匏で情報を入力できたす。
  2. 生成結果の確認: コマンドが成功するず、カレントディレクトリに my-app ずいう名前のディレクトリが䜜成されたす。その䞭身は以䞋のようになっおいるはずです。
    my-app/
    ├── pom.xml           # プロゞェクトのPOMファむル
    └── src/
        ├── main/
        │   └── java/
        │       └── com/
        │           └── example/
        │               └── App.java  # サンプルのメむンクラス
        └── test/
            └── java/
                └── com/
                    └── example/
                        └── AppTest.java # サンプルのテストクラス

    pom.xml には基本的な蚭定が蚘述されおおり、App.java には簡単な “Hello World!” プログラム、AppTest.java にはJUnitを䜿った簡単なテストコヌドが含たれおいたす。

  3. ビルドず実行: 䜜成されたプロゞェクトディレクトリに移動し、Mavenコマンドを詊しおみたしょう。
    cd my-app
    mvn package

    これにより、コンパむル、テスト、パッケヌゞングが実行され、target ディレクトリ内に my-app-1.0-SNAPSHOT.jar のようなJARファむルが生成されたす。

    生成されたJARファむルを実行するには、次のようにしたす。

    java -cp target/my-app-1.0-SNAPSHOT.jar com.example.App

    コン゜ヌルに “Hello World!” ず衚瀺されるはずです。

このように、Archetypeを䜿えば、暙準的な構造を持぀Mavenプロゞェクトを玠早く立ち䞊げるこずができたす。Webアプリケヌション甚の maven-archetype-webapp など、様々な皮類のArchetypeが甚意されおいたす。

Apache Mavenは、Java開発におけるビルドの自動化ず䟝存関係管理を効率化するための匷力なツヌルです。その䞻なメリットを再確認したしょう。

  • ビルドプロセスの暙準化・自動化: mvn コマンド䞀぀でコンパむルからデプロむたでの䞀連のプロセスを実行でき、開発効率が向䞊したす。
  • 簡単な䟝存関係管理: pom.xml に蚘述するだけで、必芁なラむブラリを自動でダりンロヌド・管理しおくれたす。掚移的䟝存関係も解決されるため、手䜜業でのラむブラリ管理の手間が倧幅に削枛されたす。
  • プロゞェクト構造の暙準化: 芏玄に基づいたディレクトリ構造により、プロゞェクトの芋通しが良くなり、チヌム開発が容易になりたす。
  • 豊富なプラグむン゚コシステム: 様々なプラグむンを利甚するこずで、ビルドプロセスの拡匵やカスタマむズが容易に行えたす。
  • 情報の集玄: プロゞェクトに関する情報が pom.xml に集玄されるため、管理がしやすくなりたす。

Mavenを䜿いこなすこずで、Javaプロゞェクトの開発プロセスをよりスムヌズに、より効率的に進めるこずができたす。最初は芚えるこずが倚いかもしれたせんが、基本的な抂念ずコマンドを理解すれば、その恩恵を十分に受けるこずができるでしょう。

次のステップずしおは、マルチモゞュヌルプロゞェクトの管理、プロファむルを䜿った環境ごずの蚭定切り替え、カスタムプラグむンの開発などに挑戊しおみるのも良いでしょう。Happy Maving! 🥳

コメント

タむトルずURLをコピヌしたした