antプログラミング(1) - プラグイン

16
Ant プププププププ(1) - プププププ 2015/11/20 Java ププププププププ QTS / ISIT ププププ プププ ププププ

Upload: takayuki-kando

Post on 11-Apr-2017

386 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Antプログラミング(1) - プラグイン

Ant プログラミング(1) - プラグイン2015/11/20 Java ツール勉強会資料

QTS / ISIT 神戸隆行(かんど たかゆき)

Page 2: Antプログラミング(1) - プラグイン

自己紹介 - 全般

2015/11/20Java ツール勉強会2

九州先端科学技術研究所( ISIT )の方から来ました 職場はそこだけど所属は Quoliarc Technology Solutions Ltd.

チーフソフトウェアエンジニア(…といっても従業員は 1 人、院の指導教官が CTO ) 数学ソフトウェア(数値解析、数式処理)、プログラム最適化、動的再構成可能プロセッサ向けコンパイラと来て今は PTaaS を作っています

連絡先: Twitter: @ChihiroShiiji Facebook: takayuki_kando mail: [email protected]

趣味プロジェクト: TRPG オンラインセッションツールの開発 趣味: イラスト描き、コスプレ?

Page 3: Antプログラミング(1) - プラグイン

自己紹介 - Ant との関わり

2015/11/20Java ツール勉強会3

普段のビルドにも使っていますが… PTaaS ( Platform for TaaS )

開発ツールをネットワークのサービスとして提供する( Tool as a Service )ためのプラットフォーム 技術的には「 XMPP ベースのマルチユーザ遠隔分散ビルド」システム

ビルドスクリプトを解釈し、ツールを起動する核の部分に Antを使っています

Page 4: Antプログラミング(1) - プラグイン

LAN実マシン

ビルド ~ 遠隔分散ビルド・ミドルウェア

クラウド仮想マシン開発ツール仮想マシン開発ツール

仮想マシン

分散ビルド・ミドルウェア

実マシン開発ツール

実マシン開発ツール

実マシン

分散ビルド・ツール

実マシン

クライアント

ビルド手順記述

ビルド手順記述

開発ツールビルド・ツールビルド手順記述

通常のビルド・ツール 分散ビルド・ツール

遠隔分散ビルド・ミドルウェア(遠隔+分散ビルド+ VM 制御)リモート実行:

ユーザ認証ファイル同期時刻同期ツール入出力の中継暗号化

仮想マシン管理隔離負荷分散

makeANTetc...

4

(構築ホスト)

(開始ホスト)

Page 5: Antプログラミング(1) - プラグイン

サーバ VM

凡例:

VMM-VM

遠隔分散ビルド型PTaaSの実験実装"Trebuchet" の構成の詳細(制御構造)

ユーザーの計算機

IDE

ワーカー VM

プロジェクト VMXMPPサーバ

クライアント・プラグイン

管理用の計算機

管理用XMPPクライアント ワーカー VM

ワーカー VM

プロジェクト・ファイルサーバ

ワーカー

ワーカー

ワーカー

プロジェクト

ローカル・ストレージ

XMPP 接続(ビルド制御、状態情報用)CloudOS API による管理

プロジェクト・ビルダ

ビルド・ツール

クラウド

VMMコンポーネント

仮想マシン・プール

Cloud OS  

API

開発ツールA

開発ツールB

開発ツールC

5

CIツールクライアント・プラグイン

※ サーバ以外はアウトバウンドの XMPP 接続になっている

DMZ

Page 6: Antプログラミング(1) - プラグイン

復習 - Ant の構造

2015/11/20Java ツール勉強会6

ターゲット (target 要素 ) の依存関係でビルドのプロセスを編成 プロパティ( property 要素)を環境や処理の過程を記述する「変数」として利用できる ターゲット内の個々の処理を表すタスク(処理毎の名のついた要素)

良く使われる処理は予め豊富に準備 exec 、 apply 、 javac 、 java 、 jar 、 zip 、 unzip 、 ftp 、

get(http) 、 mkdir 、 copy… タスクが利用するビルドに便利なデータ型も準備されている

fileset 、 pathset 、 filelist 、 patternset…

Page 7: Antプログラミング(1) - プラグイン

復習 - Ant の特長…今となっては歴史?( Ant 以前、 make と比較)

2015/11/20Java ツール勉強会7

Java で書かれていて主だった処理は Ant 内で閉じている make では依存関係ルール、拡張子ルールでコマンドを実行する機能しかない

os のコマンド、特に sh に多くを依存していた 複雑な処理や変数は makefile にシェルスクリプトの断片で書く OS の違いから大きく影響を受ける

依存関係の明示 make では依存関係はファイルの読み取り条件として間接的に指定され更新日付で実行が制御されていた

ファイルの読み書きをしないタスクはダミーのファイルを作ってtouch コマンドを実行したりしていた

拡張可能であり、拡張は Java で記述できる make を拡張する手段は基本的に存在しない

Page 8: Antプログラミング(1) - プラグイン

概要

2015/11/20Java ツール勉強会8

Ant をプログラミングする話 Ant の拡張…プラグイン・プログラミング

本日の主題 参考:「 Ant 」第 2版、 Steve Holzner 著、長瀬嘉秀 監訳、オライリージャパン、 2005年 11月

Ant をプログラムに組み込んで使う 時間の都合で今日は省略 いつか機会があれば

PTaaS では両方使っています ツールを遠隔実行する TRExec 、 TRApply タスクの追加 Projects エージェントは Ant スクリプトを解釈実行するため内部に Ant を組み込んでいます

Page 9: Antプログラミング(1) - プラグイン

タスク

2015/11/20Java ツール勉強会9

タスクの追加が恐らくプラグインの中心 一応リソースやフィルタなども追加できます

taskdef 要素で追加したいタスクを実装した Javaクラスを指定する 組みこんでしまう方法もあるが taskdef の方がお手軽

タスクの動作を指定するクラスの最低必要な条件はpublic void execute()メソッドがあること

例: sample.Greeting クラス build_greeting.xml

Page 10: Antプログラミング(1) - プラグイン

タスクのライフサイクル

2015/11/20Java ツール勉強会10

1. 無引数のコンストラクタで作成2. project 、 location フィールドの設定3. プロジェクトへのタスク id (あれば)登録4. target フィールドの設定5. init()メソッドによる初期化6. 全子要素の追加7. 全アトリビュートの設定8. 全子要素の全アトリビュート設定9. 文字データの追加10. execute() の実行

Page 11: Antプログラミング(1) - プラグイン

Task クラスの利用

2015/11/20Java ツール勉強会11

一般には Task クラスを拡張して利用 Ant とのインターフェースに便利なメソッドが色々ある

例えば既定義のプロパティへのアクセス this.getProject().getProperties() などによる

タスクのアトリビュートはセッター setXXXX() を定義しておくと渡してくれる サポートされる型: boolean 、 char 、 int 、 short 、 File 、

String 、 org.apache.tools.ant.types.Path (パス文字列)、org.apache.tools.ant.types.EnumuratedAttributes (列挙)、 String1引数のコンストラクタを有する任意のクラス

例: sample. DumpProperties クラス build_prop.xml

Page 12: Antプログラミング(1) - プラグイン

中断とログ出力

2015/11/20Java ツール勉強会12

中断には execute() 内から BuildException を投げる 例:

sample. Failure クラス build_failure.xml

ロギングは log()メソッドを利用 例:

sample. Log クラス build_log.xml

Page 13: Antプログラミング(1) - プラグイン

タスクのテキスト・コンテンツ

2015/11/20Java ツール勉強会13

テキスト addText()メソッドをオーバーライド 例(前述の log出力と同じ例):

sample. Log クラス build_log.xml

Page 14: Antプログラミング(1) - プラグイン

子要素

2015/11/20Java ツール勉強会14

カスタムな子要素 createXXXX()メソッドを定義

子要素の子要素、テキストコンテンツやアトリビュートはタスクと同様の方法で受け取れる 例:

sample. Nest クラス build_nest.xml

タスクがファイルセットをサポートする場合の子要素 Task ではなく MatchingTask を拡張して利用する 例:

sample. Dir クラス build_dir.xml

Page 15: Antプログラミング(1) - プラグイン

外部コマンドの実行

2015/11/20Java ツール勉強会15

org.apache.tools.ant.types.Commandline と既定義のタスクorg.apache.tools.ant.taskdefs.Execute を利用すれば簡単 自分で作成するとストリームの準備やエラー処理など色々大変 例(前述の log出力と同じ例):

sample. Log クラス build_log.xml

Page 16: Antプログラミング(1) - プラグイン

まとめ

2015/11/20Java ツール勉強会16

Ant をプログラミングする話(その 1 ) Ant の拡張…プラグイン・プログラミング

タスクの追加方法 アトリビュートの受け取り ログ出力 中断 テキストコンテンツの受け取り 子要素

カスタムな子要素 FileSet の子要素

外部コマンド実行 簡単でしたね!ソースコードは Gist に:

https://gist.github.com/TakayukiKando/340aca3925007c00ee73