Maven2  プラグイン入門 第一回チキチキ  『 ant  から  maven2 へ 』 〜血があつい鉄道ならばこまるよね〜 船戸 隆 [email_address]
自己紹介 <ul><li>舩戸 隆 </li></ul><ul><ul><li>株式会社エーティーエルシステムズ所属 </li></ul></ul><ul><ul><li>日本一暑い町、岐阜県多治見市出身 </li></ul></ul><ul>...
アジェンダ <ul><li>Maven Plugin とは? </li></ul><ul><li>どのように動いているか? </li></ul><ul><li>プラグインの作り方 </li></ul><ul><ul><li>ファーストステップ ...
MavenPlugin とは
MavenPlugin とは <ul><li>プロジェクトのライフサイクルの各フェーズにおける、ゴールを実行する </li></ul><ul><ul><li>ビルド、テスト、レポート出力・・・ </li></ul></ul><ul><li>プロ...
どのように動いているか?
アーキテクチャ概要 Java Classworlds Plexus Maven-core MOJO M aven   plain   O ld   J ava   O bject  maven-site-plugin maven-eclipse...
主要な使用ライブラリ <ul><li>Classworlds </li></ul><ul><ul><li>シンプルなクラスローディングライブラリ  </li></ul></ul><ul><ul><li>Maven コアとプラグインのクラスローダ...
Mojo <ul><li>Mojo </li></ul><ul><ul><li>Maven プラグインインターフェース </li></ul></ul><ul><ul><li>M  aven plain  O  ld  J  ava  O  bj...
どのように動いているか? <ul><li>Maven2の仕組み </li></ul>Classworlds MavenCore Mojo Mojo Mojo Classworlds Plexus Classloader Classloader ...
BuildLifeCycle とは <ul><li>BuildLifeCycle </li></ul><ul><ul><li>Maven ではコアコンセプトとして BuildLifeCycle という考えに基づいている </li></ul></...
BuildLifeCycle <ul><li>定義済み LifeCycle </li></ul><ul><ul><li>大きく分けて3つ </li></ul></ul><ul><ul><ul><li>Default </li></ul></ul...
BuildLifeCycle <ul><li>定義済み Phase – Default </li></ul>Via:Maven 2.0.8 テストコードコンパイル後処理 process-test-classes 成果物の配備 deploy 成果...
BuildLifeCycle <ul><li>定義済み Phase –  Clean </li></ul>clean フェーズの後に実行されるフェーズ 生成物を削除するフェーズ clean フェーズの前に実行されるフェーズ 説明 clean M...
BuildLifeCycle <ul><li>定義済み Phase –  Site </li></ul>site フェーズで生成されたものをデプロイする site フェーズの後に実行されるフェーズ JavaDoc 、レポートなどを生成するフェー...
プラグインの作り方
ファーストステップ <ul><li>ArchetypePlugin でプロジェクトを作る </li></ul><ul><ul><li>Archetype に maven-archetype-mojo を指定 </li></ul></ul><ul...
Goal、Phase指定 <ul><li>Goal 、 Phase の指定 </li></ul><ul><ul><li>Javadoc で記述 </li></ul></ul><ul><ul><li>上記の例だと、ゴールは sample で co...
パラメータの受け渡し <ul><li>Plugin に外部からパラメータを渡す </li></ul><ul><ul><li>JavaDoc で記述( Doclet と同じ) </li></ul></ul><ul><ul><li>渡す方法は3つ ...
パラメータの設定 <ul><li>実際のコード例 </li></ul><ul><ul><li>フィールドに @parameter を記述 </li></ul></ul><ul><ul><ul><li>例では param という名前で定義される ...
指定できるパラメータの種類 <ul><li>java.lang.String </li></ul><ul><li>java.lang.Integer 、 Double 、 Long </li></ul><ul><li>boolean </li>...
登録の仕方 <ul><li>mvn install するだけ </li></ul><ul><ul><li>ローカルのリポジトリにインストールされる </li></ul></ul><ul><ul><li>${user.home}/.m2/repo...
起動の仕方 <ul><li>mvn {groupID}:{artifactID}:{version}:{goal} </li></ul><ul><ul><li>このうち groupID と version は省略できる </li></ul></...
デモ
まとめ <ul><li>MavenPlugin 難しくない! </li></ul><ul><li>アイデアしだいでいろんなことができる </li></ul><ul><li>3rdParty 製の MavenPlugin もたくさんある </li...
おわり
Upcoming SlideShare
Loading in …5
×

Maven2 プラグイン入門

11,757 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
11,757
On SlideShare
0
From Embeds
0
Number of Embeds
944
Actions
Shares
0
Downloads
49
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Maven2 プラグイン入門

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

×