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

More Related Content

PDF
Groovy base gradle_20130309
PDF
Gws 20130315 gradle_handson
PDF
Jjug 20140430 gradle_basic
PDF
明日から使えるgradle
PPTX
Jenkins と groovy
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
PDF
Groovyの紹介20130323
PDF
Gradleどうでしょう
Groovy base gradle_20130309
Gws 20130315 gradle_handson
Jjug 20140430 gradle_basic
明日から使えるgradle
Jenkins と groovy
Java開発の強力な相棒として今すぐ使えるGroovy
Groovyの紹介20130323
Gradleどうでしょう

What's hot (20)

PDF
TDD勉強会キックオフ for Java
PDF
Head toward Java 13 and Java 14 #jjug
PDF
Gws 20120521 gradle
PDF
Spring in-summer-gradle-hands on-withanswers
PDF
Javaのログ出力: 道具と考え方
PDF
New features of Groovy 2.0 and 2.1
PDF
OSS Product feat. Gradle
PDF
システム開発を前進させるためのGradle導入法
PDF
JavaFX & GlassFish 勉強会 Project Visage
PDF
Beyond JUnit3
PDF
PHPUnit でテスト駆動開発を始めよう
PDF
Django最速デバッグ指南 PyConAPAC 2013
PPT
How to manage Cakephp @CakePHP_Fukuoka_2
KEY
Gws in fukuoka
PDF
よりよいPHPUnitの実行方法を求めて
PDF
Django 1.9
PPTX
Jenkins勉強会 in 札幌 第二部
PDF
Apache Archiva を試す
PDF
MakeGoodで快適なテスト駆動開発を
PDF
Perlのテストがわからない
TDD勉強会キックオフ for Java
Head toward Java 13 and Java 14 #jjug
Gws 20120521 gradle
Spring in-summer-gradle-hands on-withanswers
Javaのログ出力: 道具と考え方
New features of Groovy 2.0 and 2.1
OSS Product feat. Gradle
システム開発を前進させるためのGradle導入法
JavaFX & GlassFish 勉強会 Project Visage
Beyond JUnit3
PHPUnit でテスト駆動開発を始めよう
Django最速デバッグ指南 PyConAPAC 2013
How to manage Cakephp @CakePHP_Fukuoka_2
Gws in fukuoka
よりよいPHPUnitの実行方法を求めて
Django 1.9
Jenkins勉強会 in 札幌 第二部
Apache Archiva を試す
MakeGoodで快適なテスト駆動開発を
Perlのテストがわからない
Ad

Similar to Maven2 プラグイン入門 (20)

PPT
Maven2 plugin
PDF
Jenkins plugin memo
PPT
Jenkinsプラグイン開発
ODP
Nseg20120929
PDF
Mavenへのはじめの一歩
PDF
Agileツール適合化分科会(構成管理・ビルドツール)
PDF
Gradle handson
PPTX
Multibranch Pipeline with Docker 入門編
PDF
Grailsのススメ(仮)
PDF
Heroku java
PDF
企業におけるSpring@日本springユーザー会20090624
PDF
Should we write such like plugin or not?
PDF
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
PDF
Maven基礎
PPTX
Continuous delivery 6
PPTX
はじめてのSpring Boot
PPT
Devsumi2008
PDF
Azure DevOps Online Vol.3 - Inside Azure Pipelines
PDF
JUC2012
KEY
Behat+Symfony2ではじめるBDD超入門
Maven2 plugin
Jenkins plugin memo
Jenkinsプラグイン開発
Nseg20120929
Mavenへのはじめの一歩
Agileツール適合化分科会(構成管理・ビルドツール)
Gradle handson
Multibranch Pipeline with Docker 入門編
Grailsのススメ(仮)
Heroku java
企業におけるSpring@日本springユーザー会20090624
Should we write such like plugin or not?
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
Maven基礎
Continuous delivery 6
はじめてのSpring Boot
Devsumi2008
Azure DevOps Online Vol.3 - Inside Azure Pipelines
JUC2012
Behat+Symfony2ではじめるBDD超入門
Ad

Maven2 プラグイン入門

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