More Related Content
Head toward Java 13 and Java 14 #jjug WildFly Swarmではじめる「パーツとしてのJavaEE」 Migration Guide from Java 8 to Java 11 #jjug What's hot (20)
Catch up Java 12 and Java 13 Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入 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 JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019] Advanced database monitoring in modern java 毎日が憧れの新築、反復可能なデリバリーによる常時新築システム Similar to Maven2 plugin (20)
Gws 20130315 gradle_handson Agileツール適合化分科会(構成管理・ビルドツール) Groovy base gradle_20130309 Symfony2でより良いソフトウェアを作るために OSSで支えられるライブドアの巨大ログ集計 #nhntech キャッチアップJavaScriptビルド -ビルドから見るJSの今/2016春 Should we write such like plugin or not? Play framework 2.0のおすすめと1.2からのアップグレード Eclipse modeling projectの概要 Scrum alliance regional gathering tokyo 2013 pub More from Funato Takashi (7)
Recently uploaded (8)
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
- 2. 自己紹介
舩戸 隆
株式会社エーティーエルシステムズ所属
日本一暑い町、岐阜県多治見市出身
Java プログラマ
id:tfunato
http://www.canetrash.jp
Twitter http://twitter.com/tfunato
2007/12/19 2
- 3. アジェンダ
Plugin とは?
Maven
どのように動いているか?
プラグインの作り方
ファーストステップ
パラメータの受け渡し
登録の方法
起動の方法
まとめ
2007/12/19 3
- 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
- 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