LoginSignup
1
0

More than 3 years have passed since last update.

【Webアプリ開発】Mavenの解説

Last updated at Posted at 2020-09-14

はじめに

DreamHanksの松下です。今回はMavenの解説をしていきます。

連載記事まとめ

こちらの記事は下記の記事の補足説明です。
【第二回】SpringとMySqlとMyBatisの連動方法

ビルドツールとは

ビルドツールは、ソースコードからの実行可能アプリケーションの作成を自動化するプログラムです。

今回解説するMavenはpom.xml(Project Object Model)に基づきプロジェクトのライフサイクル全体を管理するものです。

Mavenビルドライフサイクルとは

一般的に「ビルドをする」ということは下記の3つのことを言います。

 ①作ったソースコードをコンパイルする
 ②モジュールをWARファイルに圧縮する
 ③Webアプリケーションサーバにデプロイ(配置)する

しかし実際にはビルドツールはもっと細かい作業を行っています。
ここではその細かい作業とは何があるかを解説していきます。

仕事として「ビルドをする」という言葉を聞いた場合は
上記の3つのことを言っていると覚えておいてください。

Mavenビルドライフサイクル:イメージ図

Mavenビルドライフサイクル.png

Mavenのビルドライフサイクルを通ることで安全かつ、自動的にインストールor公開ができます。

◆①pomの作成段階

下記の命令文を使って、pom.xmlの検証やリソースの生成を行います

種類 内容
validate 正しい入力値を入力されたかを検証する
generate-resources パッケージに含むリソースを生成する
process-resources リソースを配布用ディレクトリにコピーする
◆②コンパイル段階

下記の命令文を使って、コンパイルなどを行います。

開発したWebアプリをローカルリポジトリにインストールした後に、ソースの修正をした場合
「①pomの作成段階」からではなくこの段階からライフサイクルを回します。

種類 内容
compile ソースコードのコンパイルを行う
◆③テスト段階

実はMavenを使うことによって単体テストを行うためのソースコードをjunitというテストツールに作る必要がありますが
単体テストを自動化することができます。

開発したWebアプリをローカルリポジトリにインストールした後に、動作確認中に不具合が発生した場合
テストするためにこの段階からライフサイクルを回します。

単体テストをするためのモジュールがない場合は、この段階はスキップします

種類 内容
generate-test-sources コンパイルに含むテストソースコードを生成する
process-test-sources テストソースコードに対して処理を行う(フィルタリングなど)
generate-test-resources テスト用リソースを生成する
process-test-resources リソースをテスト用ディレクトリにコピーする
test-compile テストソースコードをコンパイルする
process-test-classes コンパイルで生成したテスト用ファイルに対して後処理を行う(バイトコードの拡張など)
test ユニットテストを行う
◆④パッケージング段階

下記の命令文を使って、モジュールをwarファイルに圧縮、モジュール全体の結合テストを行います。

種類 内容
prepare-package パッケージングの前段階の処理で、ここではパッケージングはされない
package コンパイルコードのパッケージング(jarなど)を行う
pre-integration-test 統合テストの前処理で、必要な環境のセットアップなどを行う
integration-test 統合テストを行う
post-integration-test 統合テストの後処理で、環境のクリーンなどを行う
verify パッケージが有効であること、品質基準を満たしていることをチェックする
◆⑤インストール段階

下記の命令文を使って、ローカルのWebアプリケーションサーバに
パッケージされたWarファイルをデプロイ(配置)を行います。

種類 内容
install ローカルリポジトリにインストールする
◆⑤公開段階

開発したWebアプリはリモートのWebアプリケーションサーバに
パッケージされたWarファイルをデプロイ(配置)します。

自分で開発したライブラリをMVNリポジトリにデプロイすることもできるようです。

種類 内容
deploy リモートリポジトリにデプロイする
◆ドキュメンテーションについて

これはライフサイクル外の話です。
覚えておくと、自分の開発しているモジュールを分析をするときに役に立ちます。

◆javadocの作成とは
モジュールの下記のような/** */で囲われたコメントの@paramなどのアノテーションに定義されている
コメントを読み取り、下記の画像のように自分の作ったモジュールのjavadocを作ることです。

/**
 * ログイン画面を開くためのメソッド
 * @param loginForm クライアント側でloginFormを使えるようにする空クラス
 * @param model ControllerからViewに値を受け渡すためのパラメータ
 * @return  ログイン画面のJSPファイル名
 */

image.png

javadocの作成の命令文

mvn javadoc

◆サイトの作成とは

下記の画像のようにモジュールが
どのようなライブラリやプラグインを使っているのかを分析できるサイトを作ることです。
image.png

サイトの作成の命令文

mvn site

実行方法

①「mvn + 上記の表の命令コマンド」
例)[mvn test]とやることで、コマンドプロンプトなどからコマンド実行ができます。

②下記のようにeclipseから実行することもできます。
image.png

しかし個々にMavenの命令文を実行する必要はありません。
・「全てビルド」をする
・「自動的にビルド」にチェックを入れておくだけで、ソースを保存するたびに
 eclipseが内部でmvnの命令文を全て実行してくれます。
image.png

これをすることでとても便利にMavenを使うことができますが、
普段はMavenを意識するする必要がなくなり、pomの設定も始めから用意されている開発しか経験をしないと
Mavenってなに?、ビルドツールってなに?という人が誕生してしまいます。

Mavenの仕組み

Mavenビルドライフサイクルのイメージ図ある「リモートリポジトリ」とは具体的に下記のサイトのことです。
Mavenのリモートリポジトリ

このサイトから「ライブラリ」をダウンロードして、ローカルで使えるようにします。

「プラグイン」は上記のサイトではなく、そのプラグインを提供している公式サイトからダウンロードします。
(例)MyBatis Generator

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 https://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.dreamhanks</groupId>
    <artifactId>workmanager</artifactId>
    <name>WorkManager</name>
    <packaging>war</packaging>
    <version>1.0.0-BUILD-SNAPSHOT</version>
    <properties>
        <java-version>1.6</java-version>
        <org.springframework-version>3.1.1.RELEASE</org.springframework-version>
        <org.aspectj-version>1.6.10</org.aspectj-version>
        <org.slf4j-version>1.6.6</org.slf4j-version>
    </properties>
種類 内容
modelVersion POM のバージョン。 特に変更する必要はありません。
groupId プロジェクトを一意に識別する名前。 プロジェクトのルートパッケージ名を指定するのが一般的です。
artifactId プロジェクトの成果物の名前。 作成する JAR や WAR, EAR ファイルなどの名前に使用されます。
packaging 作成する成果物のパッケージング・タイプ。 jar (デフォルト), war, ear などがあります。
version プロジェクトのバージョン。
name プロジェクトの表示名。 ドキュメントを作成するときなどに使用されます。
url プロジェクトのサイトの URL。 ドキュメントを作成するときなどに使用されます。
dependencies プロジェクトが依存するライブラリの情報。
warファイルとは

Webアプリケーションの圧縮ファイル。
このwarファイルをWebアプリケーションサーバにデプロイ(配置)することでアプリケーションを公開(動かすこと)ができる。

Webアプリケーションサーバとは

アプリケーションの実行環境。代表的なものがapach tomcat。

◆ライブラリの解説

<dependencies>
  <!-- MySQL -->    
  <dependency>  
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.11</version>
  </dependency> 

  ほしいライブラリを定義していく
   ・
   ・
   ・

</dependencies>
dependencyとは

ライフサイクルにおけるリモートリポジトリからライブラリをローカルリポジトリにインストールするということです。
簡単に言うと、このdependenciesタグ内にほしい外部ライブラリを定義することによってMavenが外部からダウンロードしてくれます。

このようにMaven依存関係フォルダを見ると、ダウンロードされていることがわかります。

無題.png
   

その他にライブラリの追加は下記の方法があります。
 ・マーケットプレイスからダウンロードする方法
 ・MVNリポジトリ(Mavenのリポジトリサイト)から直接ダウンロードして、Mavenの依存関係フォルダに配置する方法

◆プラグインの解説

<plugins>                                       
    <plugin>                                    
        <artifactId>maven-eclipse-plugin</artifactId>                               
        <version>2.9</version>                              
        <configuration>                             
            <additionalProjectnatures>                          
                <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>                        
            </additionalProjectnatures>                         
            <additionalBuildcommands>                           
                <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>                     
            </additionalBuildcommands>                          
            <downloadSources>true</downloadSources>                         
            <downloadJavadocs>true</downloadJavadocs>                           
        </configuration>                                
    </plugin>   
   ほしいプラグインを定義していく
   ・
   ・
   ・

</plugins>
pluginとは

ライフサイクルにおけるリモートリポジトリからプラグインをローカルリポジトリにインストールするということです。
簡単に言うと、このpluginsタグ内にほしい外部プラグインを定義することによってMavenが外部からダウンロードしてくれます。

最後に

最新内容については下記のリンク(DreamHanksのブログ)で確認することができます。
DreamHanksブログ(Javaウェブアプリ開発)

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