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
おわり

More Related Content

PDF
Heroku java
PDF
Neo4j を Javaプログラムから使う
PDF
TDD勉強会キックオフ for Java
PPTX
TDC20111031_Groovy_Geb
PDF
Head toward Java 13 and Java 14 #jjug
PDF
WildFly Swarmではじめる「パーツとしてのJavaEE」
PDF
明日から使えるgradle
PDF
Migration Guide from Java 8 to Java 11 #jjug
Heroku java
Neo4j を Javaプログラムから使う
TDD勉強会キックオフ for Java
TDC20111031_Groovy_Geb
Head toward Java 13 and Java 14 #jjug
WildFly Swarmではじめる「パーツとしてのJavaEE」
明日から使えるgradle
Migration Guide from Java 8 to Java 11 #jjug

What's hot (20)

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

Similar to Maven2 plugin (20)

PPT
Maven2 プラグイン入門
PDF
Gws 20130315 gradle_handson
PDF
Agileツール適合化分科会(構成管理・ビルドツール)
ODP
Nseg20120929
PDF
Gws 20120521 gradle
PDF
Grailsのススメ(仮)
PDF
Groovy base gradle_20130309
PDF
Symfony2でより良いソフトウェアを作るために
PDF
OSSで支えられるライブドアの巨大ログ集計 #nhntech
KEY
継続的インテグレーションとテストの話
PPTX
キャッチアップJavaScriptビルド - ビルドから見るJSの今/2016春
PDF
Should we write such like plugin or not?
PDF
Gradleどうでしょう
PDF
Gradle handson
PDF
Play framework 2.0のおすすめと1.2からのアップグレード
PDF
Cibc work kokawa
PPTX
Eclipse modeling projectの概要
PPT
Devsumi2008
PPTX
Continuous delivery 6
Maven2 プラグイン入門
Gws 20130315 gradle_handson
Agileツール適合化分科会(構成管理・ビルドツール)
Nseg20120929
Gws 20120521 gradle
Grailsのススメ(仮)
Groovy base gradle_20130309
Symfony2でより良いソフトウェアを作るために
OSSで支えられるライブドアの巨大ログ集計 #nhntech
継続的インテグレーションとテストの話
キャッチアップJavaScriptビルド - ビルドから見るJSの今/2016春
Should we write such like plugin or not?
Gradleどうでしょう
Gradle handson
Play framework 2.0のおすすめと1.2からのアップグレード
Cibc work kokawa
Eclipse modeling projectの概要
Devsumi2008
Continuous delivery 6
Ad

More from Funato Takashi (7)

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

Recently uploaded (8)

PDF
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
PDF
R-SCoRe: Revisiting Scene Coordinate Regression for Robust Large-Scale Visual...
PPTX
Cosense - 整えずして完全勝利!Cosenseが他のwikiツールと違う理由
PDF
Yamaha DT200WR Real Enduro ENGINE CYLINDER TRANSMISSION
PPTX
Vibe Codingを触って感じた現実について.pptx .
PDF
20250823_IoTLT_vol126_kitazaki_v1___.pdf
PDF
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
PDF
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
R-SCoRe: Revisiting Scene Coordinate Regression for Robust Large-Scale Visual...
Cosense - 整えずして完全勝利!Cosenseが他のwikiツールと違う理由
Yamaha DT200WR Real Enduro ENGINE CYLINDER TRANSMISSION
Vibe Codingを触って感じた現実について.pptx .
20250823_IoTLT_vol126_kitazaki_v1___.pdf
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回

Maven2 plugin

  • 1. Maven2 プラグイン入門 第一回チキチキ 『 ant から maven2 へ 』 〜血があつい鉄道ならばこまるよね〜 船戸 隆 [email protected]
  • 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