antプログラミング(1) - プラグイン
TRANSCRIPT
Ant プログラミング(1) - プラグイン2015/11/20 Java ツール勉強会資料
QTS / ISIT 神戸隆行(かんど たかゆき)
自己紹介 - 全般
2015/11/20Java ツール勉強会2
九州先端科学技術研究所( ISIT )の方から来ました 職場はそこだけど所属は Quoliarc Technology Solutions Ltd.
チーフソフトウェアエンジニア(…といっても従業員は 1 人、院の指導教官が CTO ) 数学ソフトウェア(数値解析、数式処理)、プログラム最適化、動的再構成可能プロセッサ向けコンパイラと来て今は PTaaS を作っています
連絡先: Twitter: @ChihiroShiiji Facebook: takayuki_kando mail: [email protected]
趣味プロジェクト: TRPG オンラインセッションツールの開発 趣味: イラスト描き、コスプレ?
自己紹介 - Ant との関わり
2015/11/20Java ツール勉強会3
普段のビルドにも使っていますが… PTaaS ( Platform for TaaS )
開発ツールをネットワークのサービスとして提供する( Tool as a Service )ためのプラットフォーム 技術的には「 XMPP ベースのマルチユーザ遠隔分散ビルド」システム
ビルドスクリプトを解釈し、ツールを起動する核の部分に Antを使っています
LAN実マシン
ビルド ~ 遠隔分散ビルド・ミドルウェア
クラウド仮想マシン開発ツール仮想マシン開発ツール
仮想マシン
分散ビルド・ミドルウェア
実マシン開発ツール
実マシン開発ツール
実マシン
分散ビルド・ツール
実マシン
クライアント
ビルド手順記述
ビルド手順記述
開発ツールビルド・ツールビルド手順記述
通常のビルド・ツール 分散ビルド・ツール
遠隔分散ビルド・ミドルウェア(遠隔+分散ビルド+ VM 制御)リモート実行:
ユーザ認証ファイル同期時刻同期ツール入出力の中継暗号化
仮想マシン管理隔離負荷分散
makeANTetc...
4
(構築ホスト)
(開始ホスト)
サーバ 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
復習 - Ant の構造
2015/11/20Java ツール勉強会6
ターゲット (target 要素 ) の依存関係でビルドのプロセスを編成 プロパティ( property 要素)を環境や処理の過程を記述する「変数」として利用できる ターゲット内の個々の処理を表すタスク(処理毎の名のついた要素)
良く使われる処理は予め豊富に準備 exec 、 apply 、 javac 、 java 、 jar 、 zip 、 unzip 、 ftp 、
get(http) 、 mkdir 、 copy… タスクが利用するビルドに便利なデータ型も準備されている
fileset 、 pathset 、 filelist 、 patternset…
復習 - Ant の特長…今となっては歴史?( Ant 以前、 make と比較)
2015/11/20Java ツール勉強会7
Java で書かれていて主だった処理は Ant 内で閉じている make では依存関係ルール、拡張子ルールでコマンドを実行する機能しかない
os のコマンド、特に sh に多くを依存していた 複雑な処理や変数は makefile にシェルスクリプトの断片で書く OS の違いから大きく影響を受ける
依存関係の明示 make では依存関係はファイルの読み取り条件として間接的に指定され更新日付で実行が制御されていた
ファイルの読み書きをしないタスクはダミーのファイルを作ってtouch コマンドを実行したりしていた
拡張可能であり、拡張は Java で記述できる make を拡張する手段は基本的に存在しない
概要
2015/11/20Java ツール勉強会8
Ant をプログラミングする話 Ant の拡張…プラグイン・プログラミング
本日の主題 参考:「 Ant 」第 2版、 Steve Holzner 著、長瀬嘉秀 監訳、オライリージャパン、 2005年 11月
Ant をプログラムに組み込んで使う 時間の都合で今日は省略 いつか機会があれば
PTaaS では両方使っています ツールを遠隔実行する TRExec 、 TRApply タスクの追加 Projects エージェントは Ant スクリプトを解釈実行するため内部に Ant を組み込んでいます
タスク
2015/11/20Java ツール勉強会9
タスクの追加が恐らくプラグインの中心 一応リソースやフィルタなども追加できます
taskdef 要素で追加したいタスクを実装した Javaクラスを指定する 組みこんでしまう方法もあるが taskdef の方がお手軽
タスクの動作を指定するクラスの最低必要な条件はpublic void execute()メソッドがあること
例: sample.Greeting クラス build_greeting.xml
タスクのライフサイクル
2015/11/20Java ツール勉強会10
1. 無引数のコンストラクタで作成2. project 、 location フィールドの設定3. プロジェクトへのタスク id (あれば)登録4. target フィールドの設定5. init()メソッドによる初期化6. 全子要素の追加7. 全アトリビュートの設定8. 全子要素の全アトリビュート設定9. 文字データの追加10. execute() の実行
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
中断とログ出力
2015/11/20Java ツール勉強会12
中断には execute() 内から BuildException を投げる 例:
sample. Failure クラス build_failure.xml
ロギングは log()メソッドを利用 例:
sample. Log クラス build_log.xml
タスクのテキスト・コンテンツ
2015/11/20Java ツール勉強会13
テキスト addText()メソッドをオーバーライド 例(前述の log出力と同じ例):
sample. Log クラス build_log.xml
子要素
2015/11/20Java ツール勉強会14
カスタムな子要素 createXXXX()メソッドを定義
子要素の子要素、テキストコンテンツやアトリビュートはタスクと同様の方法で受け取れる 例:
sample. Nest クラス build_nest.xml
タスクがファイルセットをサポートする場合の子要素 Task ではなく MatchingTask を拡張して利用する 例:
sample. Dir クラス build_dir.xml
外部コマンドの実行
2015/11/20Java ツール勉強会15
org.apache.tools.ant.types.Commandline と既定義のタスクorg.apache.tools.ant.taskdefs.Execute を利用すれば簡単 自分で作成するとストリームの準備やエラー処理など色々大変 例(前述の log出力と同じ例):
sample. Log クラス build_log.xml
まとめ
2015/11/20Java ツール勉強会16
Ant をプログラミングする話(その 1 ) Ant の拡張…プラグイン・プログラミング
タスクの追加方法 アトリビュートの受け取り ログ出力 中断 テキストコンテンツの受け取り 子要素
カスタムな子要素 FileSet の子要素
外部コマンド実行 簡単でしたね!ソースコードは Gist に:
https://gist.github.com/TakayukiKando/340aca3925007c00ee73