SlideShare uma empresa Scribd logo
1 de 26
Maven2 プラグイン入門
              第一回チキチキ
     『 ant から maven2 へ 』
〜血があつい鉄道ならばこまるよね〜
                    船戸 隆
           tfunato@gmail.com
自己紹介

 舩戸 隆
     株式会社エーティーエルシステムズ所属

     日本一暑い町、岐阜県多治見市出身

     Java  プログラマ
     id:tfunato

     http://www.canetrash.jp
       Twitter http://twitter.com/tfunato




2007/12/19                                   2
アジェンダ

     Plugin とは?
 Maven
 どのように動いているか?
 プラグインの作り方
     ファーストステップ

     パラメータの受け渡し

     登録の方法

     起動の方法

 まとめ

2007/12/19         3
MavenPlugin とは
MavenPlugin とは

 プロジェクトのライフサイクルの各フェ
   ーズにおける、ゴールを実行する
     ビルド、テスト、レポート出力・・・

 プロセスを簡素・共通化
     コマンドの引数を変えるだけ

     誰がやっても同じ手順

 Java       でできることは何でもできる


2007/12/19              5
どのように動いているか?
アーキテクチャ概要

        maven-clean-plugin maven-eclipse-plugin
                                                  maven-site-plugin


                               MOJO
                     Maven plain Old Java Object


      Classworlds           Plexus                Maven-core

                               Java

2007/12/19                                                7
主要な使用ライブラリ

 Classworlds          http://classworlds.codehaus.org/
       シンプルなクラスローディングライブラリ
       Maven コアとプラグインのクラスローダを切り分ける
 Plexus     http://plexus.codehaus.org/

     軽量  DI コンテナ
     Maven 2の本体そのもの

     コンポーネントのライフサイクルのサポート

     ネストしたコンテナ

     コンポーネント単位のクラスローダーの分離

2007/12/19                                         8
Mojo

 Mojo
     Maven プラグインインターフェース
     M aven plain O ld J ava O bject
       org.apache.maven.plugin.Mojo インターフェース
          定義されてるのは

             • setLog(Log log) 、 getLog() 、 void execute() だけ!
       org.apache.maven.plugin.AbstractMojo
          継承して Plugin を作る

          void execute() を実装するだけ!




2007/12/19                                        9
どのように動いているか?

 Maven2         の仕組み
 MavenCore                            Mojo
                                      Classloader
             Classworlds
                                      Mojo
                      Plexus
                                      Classloader


                                      Mojo
     Plugin ごとに Classloader が別        Classloader
2007/12/19                       10
BuildLifeCycle とは

 BuildLifeCycle
    Maven   ではコアコンセプトとして
     BuildLifeCycle という考えに基づいている
    LifeCycle としてビルド、配布、成果物作成、
     テストなどのプロセスを明確に分離して定義し
     ている
    その分離した単位を Phase という
       Phase    は Plugin のまとまり
         デフォルトの Phase は

        ${M2_HOME}/lib/maven-core-2.0.X-uber.jar の META
2007/12/19 - INF/plexus/components.xml に定義 11
BuildLifeCycle
                              <configuration>

 定義済み
                                  <lifecycles>

                  LifeCycle        <lifecycle>
                                     <id>default</id>
                                     <phases>
     大きく分けて3つ                         <phase>validate</phase>
                                       <phase>initialize</phase>
                                       <phase>generate-sources</phase>
         Default                      <phase>process-sources</phase>
                                       <phase>generate-resources</phase>
                                       <phase>process-resources</phase>
             • プロジェクトのライフサイクル          <phase>compile</phase>
                                       <phase>process-classes</phase>
                                       <phase>generate-test-sources</phase>
         Clean                        <phase>process-test-sources</phase>
                                       <phase>generate-test-resources</phase>
             • プロジェクトのクリーン             <phase>process-test-resources</phase>
                                       <phase>test-compile</phase>

             • 生成物のお掃除
                                       <phase>process-test-classes</phase>
                                       <phase>test</phase>
                                       <phase>package</phase>
         Site                         <phase>pre-integration-test</phase>
                                       <phase>integration-test</phase>
                                       <phase>post-integration-test</phase>
             • プロジェクトのサイト作成            <phase>verify</phase>
                                       <phase>install</phase>
             • ドキュメント、レポート作成           <phase>deploy</phase>
                                     </phases>
                              <configuration>
             • 派生成果物
2007/12/19                                                      12
BuildLifeCycle

 定義済み                   Phase – Default
 Phase                      概略             Phase                    概略
 validate                   POM の精査        test-compile             テストコードコンパイル

 initialize                 ビルドプロセスの準備     process-test-            テストコードコンパイル後処
                                           classes                  理
 generate-sources           ソースコード生成
                                           test                     テスト実行
 process-sources            ソースコードの成形
                                           package                  成果物のパッケージング
 generate-resources         リソース生成
                                           pre-integration-test     インテグレーションテスト準
 process-resources          リソース成形                                  備
 compile                    コンパイル          integration-test         インテグレーションテスト
 process-classes            コンパイル後処理       post-integration-test    インテグレーションテスト後
                                                                    処理
 generate-test-sources      テストコード生成
                                           verify                   パッケージング後チェック
 process-test-sources       テストコード成形
                                           install                  成果物のインストール2.0.8
 generate-test-resources    テストリソース生成                                   Via:Maven
                                           deploy                   成果物の配備
 process-test-resources     テストリソース成形

2007/12/19                                                         13
BuildLifeCycle
 定義済み            Phase – Clean
        Phase    Mojo         Plugin                   説明

pre-clean                                    clean フェーズの前に実行されるフェーズ

clean           clean   maven-clean-plugin   生成物を削除するフェーズ

post-clean                                   clean フェーズの後に実行されるフェーズ




2007/12/19                                             14
BuildLifeCycle
 定義済み           Phase – Site
       Phase    Mojo          Plugin                  説明

pre-site                                    site フェーズの前に実行されるフェーズ
                                            JavaDoc 、レポートなどを生成するフェー
site           site     maven-site-plugin
                                            ズ
post-site                                   site フェーズの後に実行されるフェーズ
                                            site フェーズで生成されたものをデプロイ
site-deploy    deploy   maven-site-plugin
                                            する




2007/12/19                                             15
プラグインの作り方
ファーストステップ

 ArchetypePlugin               でプロジェクトを作る
     Archetypeに maven-archetype-mojo を指定
     MavenPlugin プロジェクトの雛形ができる

  mvn archetype:create
          -DpackageName= 任意のパッケージ
          -DgroupId= 任意のグループ ID
          -DartifactId=maven-sample-plugin
          -DarchetypeArtifactId=maven-archetype-mojo


     ・すでに実装コードが用意された状態
     ・ artifactId の maven-#####-plugin が重要
     ・ <packaging>maven-plugin</packaging>


2007/12/19                                             17
Goal 、 Phase 指定
 Goal       、 Phase の指定
     Javadoc     で記述
             /**
              * @goal sample
              * @phase compile
              */
             public class MyMojo
                 extends AbstractMojo
             {

     上記の例だと、ゴールは                       sample で compile の
      フェーズで実行される

2007/12/19                                      18
パラメータの受け渡し
 Plugin      に外部からパラメータを渡す
       JavaDoc で記述( Doclet と同じ)
       渡す方法は3つ
            起動引数としてパラメータを渡す
              • -D つきでパラメータを渡す
            pom.xml で定義
              • <configuration> で定義
            settings.xml で定義
              • プロファイルのプロパティに定義
       同時に定義された場合
            pom.xml > settings.xml > 起動引数の順で使われる

2007/12/19                             19
パラメータの設定

 実際のコード例
           /**
          * @parameter
          */
          private String param;

     フィールドに              @parameter を記述
         例では     param という名前で定義される
             • POM に定義されてるもののみ設定される
             • 起動時パラメータを受け取るには explession を使う




2007/12/19                                 20
指定できるパラメータの種類
 java.lang.String
 java.lang.Integer   、 Double 、 Long
 boolean
 java.util.Date
 java.io.File
 java.util.URL
 java.util.Map
 Collections
 配列
 その他

2007/12/19                              21
登録の仕方

 mvn        install するだけ
     ローカルのリポジトリにインストールされる

     ${user.home}/.m2/repository


              mvn install
     packaging     されるときに plugin.xml が作成され
      る
         Plugin   のパラメータや goal が定義されたもの


2007/12/19                          22
起動の仕方

 mvn        {groupID}:{artifactID}:{version}:{goal}
     このうち           groupID と version は省略できる
         POM に plugin が定義されていれば groupID は省略可
         Version は最新のものが使われる

         groupID が org.apache.maven.plugin は暗黙のうちに省略可

            artifactID が maven-XXXXX-plugin であれば maven と plugin が省略で
フル指定         きる。

mvn jp.canetrash.maven.plugin:maven-sample-plugin:1.0:sample
省略形

 mvn sample:sample

2007/12/19                                            23
デモ
まとめ

 MavenPlugin難しくない!
 アイデアしだいでいろんなことができる
 3rdParty 製の MavenPlugin もたくさんあ
  る
 Maven をうまく使ってハッピーに




2007/12/19               25
おわり

Mais conteúdo relacionado

Mais procurados

Jenkinsプラグイン開発
Jenkinsプラグイン開発Jenkinsプラグイン開発
Jenkinsプラグイン開発
Takahisa Wada
 
Integration test with Arquillian and JBoss AS 7
Integration test with Arquillian and JBoss AS 7Integration test with Arquillian and JBoss AS 7
Integration test with Arquillian and JBoss AS 7
Takayuki Konishi
 
テスト環境まるごとAwsにのっけてみた
テスト環境まるごとAwsにのっけてみたテスト環境まるごとAwsにのっけてみた
テスト環境まるごとAwsにのっけてみた
Kazuaki Fujikura
 
Jenkins plugin memo
Jenkins plugin memoJenkins plugin memo
Jenkins plugin memo
Kiyotaka Oku
 
アップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられるアップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられる
Brian Gesiak
 

Mais procurados (20)

Catch up Java 12 and Java 13
Catch up Java 12 and Java 13Catch up Java 12 and Java 13
Catch up Java 12 and Java 13
 
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
 
Jenkinsプラグイン開発
Jenkinsプラグイン開発Jenkinsプラグイン開発
Jenkinsプラグイン開発
 
Integration test with Arquillian and JBoss AS 7
Integration test with Arquillian and JBoss AS 7Integration test with Arquillian and JBoss AS 7
Integration test with Arquillian and JBoss AS 7
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
 
Gradle a new Generation Build Tool
Gradle a new Generation Build ToolGradle a new Generation Build Tool
Gradle a new Generation Build Tool
 
Head toward Java 15 and Java 16
Head toward Java 15 and Java 16Head toward Java 15 and Java 16
Head toward Java 15 and Java 16
 
JavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょJavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょ
 
大規模な負荷でもドキドキしない為のJava EE
大規模な負荷でもドキドキしない為のJava EE大規模な負荷でもドキドキしない為のJava EE
大規模な負荷でもドキドキしない為のJava EE
 
[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration
 
テスト環境まるごとAwsにのっけてみた
テスト環境まるごとAwsにのっけてみたテスト環境まるごとAwsにのっけてみた
テスト環境まるごとAwsにのっけてみた
 
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
 
Jenkins plugin memo
Jenkins plugin memoJenkins plugin memo
Jenkins plugin memo
 
Spring bootでweb ユニットテスト編
Spring bootでweb ユニットテスト編Spring bootでweb ユニットテスト編
Spring bootでweb ユニットテスト編
 
Web技術勉強会 第30回
Web技術勉強会 第30回Web技術勉強会 第30回
Web技術勉強会 第30回
 
Advanced database monitoring in modern java
Advanced database monitoring in modern javaAdvanced database monitoring in modern java
Advanced database monitoring in modern java
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
 
テストゼロからイチに進むための戦略と戦術
テストゼロからイチに進むための戦略と戦術テストゼロからイチに進むための戦略と戦術
テストゼロからイチに進むための戦略と戦術
 
iOSビヘイビア駆動開発
iOSビヘイビア駆動開発iOSビヘイビア駆動開発
iOSビヘイビア駆動開発
 
アップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられるアップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられる
 

Semelhante a Maven2 plugin

Maven2 プラグイン入門
Maven2 プラグイン入門Maven2 プラグイン入門
Maven2 プラグイン入門
guestd4898b
 
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929
hiro345
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
Etsuji Nakai
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
Atsuhiro Kubo
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
Ayumu Kawaguchi
 
継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ
Yasutomo Arai
 
Jenkins javascript ci
Jenkins javascript ciJenkins javascript ci
Jenkins javascript ci
hisame64
 

Semelhante a Maven2 plugin (20)

どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
 
Maven2 プラグイン入門
Maven2 プラグイン入門Maven2 プラグイン入門
Maven2 プラグイン入門
 
Gradle handson
Gradle handsonGradle handson
Gradle handson
 
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
 
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929
 
実行可能JavaFXアプリケーションJAR(発表直前版)
実行可能JavaFXアプリケーションJAR(発表直前版)実行可能JavaFXアプリケーションJAR(発表直前版)
実行可能JavaFXアプリケーションJAR(発表直前版)
 
Selenium
SeleniumSelenium
Selenium
 
Beginning Java EE 6 勉強会(3) #bje_study
Beginning Java EE 6 勉強会(3) #bje_studyBeginning Java EE 6 勉強会(3) #bje_study
Beginning Java EE 6 勉強会(3) #bje_study
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
 
Version管理 1
Version管理 1Version管理 1
Version管理 1
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
 
継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ
 
(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry
 
Devsumi2008
Devsumi2008Devsumi2008
Devsumi2008
 
Jenkins javascript ci
Jenkins javascript ciJenkins javascript ci
Jenkins javascript ci
 
Azure load testingを利用したパフォーマンステスト
Azure load testingを利用したパフォーマンステストAzure load testingを利用したパフォーマンステスト
Azure load testingを利用したパフォーマンステスト
 
Scoop!
Scoop!Scoop!
Scoop!
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 

Mais de Funato Takashi (7)

プログラムを作って飯を食うということ
プログラムを作って飯を食うということプログラムを作って飯を食うということ
プログラムを作って飯を食うということ
 
Git flow cheatsheet
Git flow cheatsheetGit flow cheatsheet
Git flow cheatsheet
 
Springでdao 20070413
Springでdao 20070413Springでdao 20070413
Springでdao 20070413
 
Unit testで定時帰宅!
Unit testで定時帰宅!Unit testで定時帰宅!
Unit testで定時帰宅!
 
問題解決ノ勘所
問題解決ノ勘所問題解決ノ勘所
問題解決ノ勘所
 
Javaでmongo db
Javaでmongo dbJavaでmongo db
Javaでmongo db
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方
 

Último

Último (7)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

Maven2 plugin

  • 1. Maven2 プラグイン入門 第一回チキチキ 『 ant から maven2 へ 』 〜血があつい鉄道ならばこまるよね〜 船戸 隆 tfunato@gmail.com
  • 2. 自己紹介  舩戸 隆  株式会社エーティーエルシステムズ所属  日本一暑い町、岐阜県多治見市出身  Java プログラマ  id:tfunato  http://www.canetrash.jp  Twitter http://twitter.com/tfunato 2007/12/19 2
  • 3. アジェンダ Plugin とは?  Maven  どのように動いているか?  プラグインの作り方  ファーストステップ  パラメータの受け渡し  登録の方法  起動の方法  まとめ 2007/12/19 3
  • 5. MavenPlugin とは  プロジェクトのライフサイクルの各フェ ーズにおける、ゴールを実行する  ビルド、テスト、レポート出力・・・  プロセスを簡素・共通化  コマンドの引数を変えるだけ  誰がやっても同じ手順  Java でできることは何でもできる 2007/12/19 5
  • 7. アーキテクチャ概要 maven-clean-plugin maven-eclipse-plugin maven-site-plugin MOJO Maven plain Old Java Object Classworlds Plexus Maven-core Java 2007/12/19 7
  • 8. 主要な使用ライブラリ  Classworlds http://classworlds.codehaus.org/  シンプルなクラスローディングライブラリ  Maven コアとプラグインのクラスローダを切り分ける  Plexus http://plexus.codehaus.org/  軽量 DI コンテナ  Maven 2の本体そのもの  コンポーネントのライフサイクルのサポート  ネストしたコンテナ  コンポーネント単位のクラスローダーの分離 2007/12/19 8
  • 9. Mojo  Mojo  Maven プラグインインターフェース  M aven plain O ld J ava O bject  org.apache.maven.plugin.Mojo インターフェース  定義されてるのは • setLog(Log log) 、 getLog() 、 void execute() だけ!  org.apache.maven.plugin.AbstractMojo  継承して Plugin を作る  void execute() を実装するだけ! 2007/12/19 9
  • 10. どのように動いているか?  Maven2 の仕組み MavenCore Mojo Classloader Classworlds Mojo Plexus Classloader Mojo Plugin ごとに Classloader が別 Classloader 2007/12/19 10
  • 11. BuildLifeCycle とは  BuildLifeCycle  Maven ではコアコンセプトとして BuildLifeCycle という考えに基づいている  LifeCycle としてビルド、配布、成果物作成、 テストなどのプロセスを明確に分離して定義し ている  その分離した単位を Phase という  Phase は Plugin のまとまり  デフォルトの Phase は ${M2_HOME}/lib/maven-core-2.0.X-uber.jar の META 2007/12/19 - INF/plexus/components.xml に定義 11
  • 12. BuildLifeCycle <configuration>  定義済み <lifecycles> LifeCycle <lifecycle> <id>default</id> <phases>  大きく分けて3つ <phase>validate</phase> <phase>initialize</phase> <phase>generate-sources</phase>  Default <phase>process-sources</phase> <phase>generate-resources</phase> <phase>process-resources</phase> • プロジェクトのライフサイクル <phase>compile</phase> <phase>process-classes</phase> <phase>generate-test-sources</phase>  Clean <phase>process-test-sources</phase> <phase>generate-test-resources</phase> • プロジェクトのクリーン <phase>process-test-resources</phase> <phase>test-compile</phase> • 生成物のお掃除 <phase>process-test-classes</phase> <phase>test</phase> <phase>package</phase>  Site <phase>pre-integration-test</phase> <phase>integration-test</phase> <phase>post-integration-test</phase> • プロジェクトのサイト作成 <phase>verify</phase> <phase>install</phase> • ドキュメント、レポート作成 <phase>deploy</phase> </phases> <configuration> • 派生成果物 2007/12/19 12
  • 13. BuildLifeCycle  定義済み Phase – Default Phase 概略 Phase 概略 validate POM の精査 test-compile テストコードコンパイル initialize ビルドプロセスの準備 process-test- テストコードコンパイル後処 classes 理 generate-sources ソースコード生成 test テスト実行 process-sources ソースコードの成形 package 成果物のパッケージング generate-resources リソース生成 pre-integration-test インテグレーションテスト準 process-resources リソース成形 備 compile コンパイル integration-test インテグレーションテスト process-classes コンパイル後処理 post-integration-test インテグレーションテスト後 処理 generate-test-sources テストコード生成 verify パッケージング後チェック process-test-sources テストコード成形 install 成果物のインストール2.0.8 generate-test-resources テストリソース生成 Via:Maven deploy 成果物の配備 process-test-resources テストリソース成形 2007/12/19 13
  • 14. BuildLifeCycle  定義済み Phase – Clean Phase Mojo Plugin 説明 pre-clean clean フェーズの前に実行されるフェーズ clean clean maven-clean-plugin 生成物を削除するフェーズ post-clean clean フェーズの後に実行されるフェーズ 2007/12/19 14
  • 15. BuildLifeCycle  定義済み Phase – Site Phase Mojo Plugin 説明 pre-site site フェーズの前に実行されるフェーズ JavaDoc 、レポートなどを生成するフェー site site maven-site-plugin ズ post-site site フェーズの後に実行されるフェーズ site フェーズで生成されたものをデプロイ site-deploy deploy maven-site-plugin する 2007/12/19 15
  • 17. ファーストステップ  ArchetypePlugin でプロジェクトを作る  Archetypeに maven-archetype-mojo を指定  MavenPlugin プロジェクトの雛形ができる mvn archetype:create -DpackageName= 任意のパッケージ -DgroupId= 任意のグループ ID -DartifactId=maven-sample-plugin -DarchetypeArtifactId=maven-archetype-mojo ・すでに実装コードが用意された状態 ・ artifactId の maven-#####-plugin が重要 ・ <packaging>maven-plugin</packaging> 2007/12/19 17
  • 18. Goal 、 Phase 指定  Goal 、 Phase の指定  Javadoc で記述 /** * @goal sample * @phase compile */ public class MyMojo extends AbstractMojo {  上記の例だと、ゴールは sample で compile の フェーズで実行される 2007/12/19 18
  • 19. パラメータの受け渡し  Plugin に外部からパラメータを渡す  JavaDoc で記述( Doclet と同じ)  渡す方法は3つ  起動引数としてパラメータを渡す • -D つきでパラメータを渡す  pom.xml で定義 • <configuration> で定義  settings.xml で定義 • プロファイルのプロパティに定義  同時に定義された場合  pom.xml > settings.xml > 起動引数の順で使われる 2007/12/19 19
  • 20. パラメータの設定  実際のコード例   /** * @parameter */ private String param;  フィールドに @parameter を記述  例では param という名前で定義される • POM に定義されてるもののみ設定される • 起動時パラメータを受け取るには explession を使う 2007/12/19 20
  • 21. 指定できるパラメータの種類  java.lang.String  java.lang.Integer 、 Double 、 Long  boolean  java.util.Date  java.io.File  java.util.URL  java.util.Map  Collections  配列  その他 2007/12/19 21
  • 22. 登録の仕方  mvn install するだけ  ローカルのリポジトリにインストールされる  ${user.home}/.m2/repository mvn install  packaging されるときに plugin.xml が作成され る  Plugin のパラメータや goal が定義されたもの 2007/12/19 22
  • 23. 起動の仕方  mvn {groupID}:{artifactID}:{version}:{goal}  このうち groupID と version は省略できる  POM に plugin が定義されていれば groupID は省略可  Version は最新のものが使われる  groupID が org.apache.maven.plugin は暗黙のうちに省略可  artifactID が maven-XXXXX-plugin であれば maven と plugin が省略で フル指定 きる。 mvn jp.canetrash.maven.plugin:maven-sample-plugin:1.0:sample 省略形 mvn sample:sample 2007/12/19 23
  • 25. まとめ  MavenPlugin難しくない!  アイデアしだいでいろんなことができる  3rdParty 製の MavenPlugin もたくさんあ る  Maven をうまく使ってハッピーに 2007/12/19 25