狠狠撸

狠狠撸Share a Scribd company logo
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

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