SlideShare ist ein Scribd-Unternehmen logo
1 von 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
おわり

Weitere ähnliche Inhalte

Was ist angesagt?

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 13Yuji Kubota
 
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入Takayuki Konishi
 
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 7Takayuki Konishi
 
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)Yuji Kubota
 
Gradle a new Generation Build Tool
Gradle a new Generation Build ToolGradle a new Generation Build Tool
Gradle a new Generation Build ToolShinya Mochida
 
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 16Yuji Kubota
 
JavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょJavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょKohki Nakashima
 
大規模な負荷でもドキドキしない為のJava EE
大規模な負荷でもドキドキしない為のJava EE大規模な負荷でもドキドキしない為のJava EE
大規模な負荷でもドキドキしない為のJava EETaiichilow Nagase
 
[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 IntegrationKazuchika Sekiya
 
テスト環境まるごとAwsにのっけてみた
テスト環境まるごとAwsにのっけてみたテスト環境まるごとAwsにのっけてみた
テスト環境まるごとAwsにのっけてみたKazuaki Fujikura
 
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]David Buck
 
Jenkins plugin memo
Jenkins plugin memoJenkins plugin memo
Jenkins plugin memoKiyotaka Oku
 
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 javaChihiro Ito
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システムTomohiro Ohtake
 
テストゼロからイチに進むための戦略と戦術
テストゼロからイチに進むための戦略と戦術テストゼロからイチに進むための戦略と戦術
テストゼロからイチに進むための戦略と戦術Y Watanabe
 
iOSビヘイビア駆動開発
iOSビヘイビア駆動開発iOSビヘイビア駆動開発
iOSビヘイビア駆動開発Brian Gesiak
 
アップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられるアップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられるBrian Gesiak
 

Was ist angesagt? (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ビヘイビア駆動開発
 
アップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられるアップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられる
 

Ähnlich wie Maven2 plugin

どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷JavaToshiaki Maki
 
Maven2 プラグイン入門
Maven2 プラグイン入門Maven2 プラグイン入門
Maven2 プラグイン入門guestd4898b
 
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方Yuki Morishita
 
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929hiro345
 
実行可能JavaFXアプリケーションJAR(発表直前版)
実行可能JavaFXアプリケーションJAR(発表直前版)実行可能JavaFXアプリケーションJAR(発表直前版)
実行可能JavaFXアプリケーションJAR(発表直前版)torutk
 
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_studyinatus
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介Etsuji Nakai
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodAtsuhiro Kubo
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーAyumu Kawaguchi
 
継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージYasutomo Arai
 
(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry(続) はじめてのCloud Foundry
(続) はじめてのCloud FoundryTomohiro Ichimura
 
Jenkins javascript ci
Jenkins javascript ciJenkins javascript ci
Jenkins javascript cihisame64
 
Azure load testingを利用したパフォーマンステスト
Azure load testingを利用したパフォーマンステストAzure load testingを利用したパフォーマンステスト
Azure load testingを利用したパフォーマンステストKuniteru Asami
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handsonNobuhiro Sue
 

Ähnlich wie 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
 

Mehr von Funato Takashi

プログラムを作って飯を食うということ
プログラムを作って飯を食うということプログラムを作って飯を食うということ
プログラムを作って飯を食うということFunato Takashi
 
Springでdao 20070413
Springでdao 20070413Springでdao 20070413
Springでdao 20070413Funato Takashi
 
Unit testで定時帰宅!
Unit testで定時帰宅!Unit testで定時帰宅!
Unit testで定時帰宅!Funato Takashi
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方Funato Takashi
 

Mehr von 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
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方
 

Kürzlich hochgeladen

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Kürzlich hochgeladen (8)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

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