SvnAntとAntでチェックアウトからコンパイルまで自動化する
やりたかったことは
・SVNからチェックアウト
・自動でコンパイル
とめっちゃ単純なことをやりたい。
Jenkisでやろうかなと思ったけど、訳ありインストールせずに
出来る必要があったので、Antで出来ないかなと調べた結果を残しときます。
①Antってなんぞい?
1. Antの基礎 | TECHSCORE(テックスコア)
http://www.techscore.com/tech/Java/ApacheJakarta/Ant/1/
これを小一時間読んで理解できました。
ビルドファイルの書き方を理解すれば十分。
②Eclipseから自動作成して、整形。
ファイル -> エクスポート -> 一般 -> Antビルド・ファイルで
さくっと出来ます。
クラウドサービスプラットフォーム Cosminexus:Antのbuild.xmlをEclipseから自動生成するには?:ソフトウェア:日立
http://www.hitachi.co.jp/Prod/comp/soft1/cosminexus/useful/tips/091204_eclipse-create-buildxml.html
ぱっと見、難しそうなファイルが出来てきますが、①で理解しておけば簡単に読めます。
ざっくり言うとtargetタグのname=buildがデフォルトでは、最初に呼び出されるやつです。そのbuildに書かれているdepends=なんちゃらのなんちゃらが先行タスクとなり、buildの中身が実行される前になんちゃらが実行されます。なんちゃらにさらにdepends=なんちゃらなんちゃらが書いてあると、なんちゃらなんちゃら→なんちゃら→buildと順番に呼び出されることになります。これさえ理解しておけばbuild.xmlの実行順は理解できるでしょう。
あとはタスクの書き方を押さえればいいだけなので、簡単です。
③Javacタスクを理解しておく。
Javacタスク
http://www.jajakarta.org/ant/ant-1.6.1/docs/ja/manual/CoreTasks/javac.html
④ant実行
antを環境変数設定せずとも、antのbinにcdしてコマンドプロンプトから
antって打ったら実行できる。でも、実行するとこんなエラーが出てしまった。
システム・リソースが不足しています。
詳細は次のスタック・トレースを調査してください。[javac] java.lang.StackOverflowError
[javac] at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:384)
[javac] at com.sun.tools.javac.comp.Attr.visitBinary(Attr.java:1618)
ぐぐってみても英語ばかり。
build failed java.lang.StackOverflowError | Oracle Community
https://community.oracle.com/thread/1520514
java - Ant's <javac> tasks throws StackOverflowException - Stack Overflow
http://stackoverflow.com/questions/16935/ants-javac-tasks-throws-stackoverflowexception
Ant「javacタスク」メモ(Hishidama's ant-javac Memo)
http://www.ne.jp/asahi/hishidama/home/tech/ant/tag/javac.html
Compile problems using ant and Java 1.7 - Stack Overflow
http://stackoverflow.com/questions/11529000/compile-problems-using-ant-and-java-1-7
翻訳しながらなんとか解読。
javacのとこに"-J-Xss10M"を足したら上手いこと行った。
<javac debug="true"
srcdir="gen"
destdir="gen-bin"
fork="yes">
<compilerarg value="-J-Xss10M" />
</javac
⑤Svnからチェックアウトのところは「SvnAnt」を使う
とりあえず公式からダウンロードして、解凍して
antのbinにsvnantのbinの中身をコピーして置いたらOK。
これでbuild.xmlにsvnタスクをかける準備が出来た
subclipse:
http://subclipse.tigris.org/svnant.html
⑥build.xmlにsvnの宣言を書き足す。
<!-- Sub-Ant -->
<path id="lib-svnant">
<fileset dir="${ant.dir}/lib">
<include name="**/*.jar"/>
</fileset>
</path>
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="lib-svnant" />
<svnsetting id="svn.setting"
javahl="false"
svnkit="true"
username="${svn.user}" password="${svn.passwd}" />
${svn.user}とか${svn.passwd}はプロパティで宣言しておく。
⑦ant実行したらエラーが出た
missing svnkit dependencies on the classpath using svnant
ってエラーが出て、ぐぐっても英語ばかり。
svn - missing svnkit dependencies on the classpath using svnant - Stack Overflow
http://stackoverflow.com/questions/10721104/missing-svnkit-dependencies-on-the-classpath-using-svnant
Missing 'javahl' dependencies on the classpath ! | code up
http://frmmpgit.blog.fc2.com/blog-entry-78.html
翻訳しながら試行錯誤した
<svn refid="svn.setting">って宣言したらうまいこといった。
※上の"svn.setting"が前提。
javahl="false"
svnkit="true"がポイントなのかな。
⑧ここまで出来たらantで上手いこといく
・プロパティで宣言して
・cleanでdeleteして
・initでmkdirして
・checkoutでcheckoutして
・buildでjavacする
これでAnt実行するだけで
やりたいことが出来るようになりました。
Mavenやったり、Jenkinsやったりが流行っているけど
古典的なやり方でも十分やね。
古典的なやり方と思ってたけど、英語サイトしかひっかからなかったのはなんでだろう。あんまりこんなしょぼいことにならないのかな^^;
誰かの参考になればコレ幸い。
SharePointを調べてみた
とりあえずググってみてお勉強。
SharePointってなに???
グループウェアってのは知っているけど、なにが美味しいの?レベルから。
1,2,4を読んだ。
パッケージ導入ってしたことないからよく分からんけど、アドオン開発は辞めておけってことね。アドオンはスクラッチ的に開発する、設定でごちょごちょするのはアドオンってより「カスタマイズ」って言葉のほうがしっくり来るんです。
脱線して、office365も調べてみる。
office365のなかにSharePointがあるのか??
ライセンスのE1とE3,E4の違いってなに??
モヤモヤ感が残ります。
2.19日経コンピュータ
日経コンピュータ読んだメモ
SQLインジェクション対策もれの責任を開発会社に問う判決 | 徳丸浩の日記
IPAで言ってるでしょっていうのが理由か、常識でしょっていうのが理由かよく分かりませんが、要件に明記してなかったのに受注側が完敗なのが驚いた。
地銀を狙え〜金融機関向けIT化がピークに、大手各社入り乱れてのデットヒート
あんまり金融分からんのですが、そんなことになっているんですねと勉強になった。
動かないコンピュータのNTTデータ関西の書類発行トラブルもヒト事じゃないので、勉強になった。同時実行数と平成”元年”ね。
count(*)とcount(列名)の違い
この本読んで、学んだこと
SELECT COUNT(*) と SELECT COUNT(<列名>) との違い ( ソフトウェア ) - 仕事で使うVBA - Yahoo!ブログ
count(*)ってやったら遅くなるからcount(1)ってやってね。って本当かどうか分からない話も聞いたことあるけど、count(列名)ってあまり意識してなかったなあ。
意図してcount(列名)とか組まれていても、スルーしてしまいそうだなと思った。それならちゃんとwhere句で is not null指定してあげたほうが頭には優しいよね。
count(列名)しか満たせない時ってあるのかな?
改訂新版 反復学習ソフト付き SQL書き方ドリル (WEB+DB PRESS plusシリーズ)
- 作者: 羽生章洋,和田省二
- 出版社/メーカー: 技術評論社
- 発売日: 2007/05/18
- メディア: 大型本
- 購入: 24人 クリック: 355回
- この商品を含むブログ (56件) を見る
Eclipse3.6完全攻略を読んで
オカレンス検索の種類
出現箇所のマーク
キーアシスト
ブレークポイントの種類
アウトラインビューからの設定
フレームにドロップ
指定されたフォルダ内の特定拡張子のファイルを検索するWindowsバッチ
■概要
特定のディレクトリに特定の拡張子のファイルが存在するかチェックする。
■小ネタ
①同一処理を呼び出す場合はサブルーチンを利用する
CALL :CHECK_FILE %CHECK_DIR\dir1\ CALL :CHECK_FILE %CHECK_DIR\dir2\ CALL :CHECK_FILE %CHECK_DIR\dir3\
※サブルーチンを呼び出す時に引数も使える。
:CHECK_FILE CD /D %1
②サブディレクトリも検索対象とする場合は「/s」オプションをつける。
FOR /f "delims=;" %%I IN ('dir /b /on /s *.txt') DO (
③削除確認が必要な場合は「/Q」オプションをつける。
DEL /Q %%I
④現在実行中のバッチ・スクリプトを終了する
EXIT /B
■サンプルプログラム
@ECHO OFF SET CHECK_DIR=C:TEMP\ ECHO 配下にロックファイルが作成されているかチェックを行います。 ECHO チェック対象ディレクトリ:%CHECK_DIR% SET /P CHECK_FLG="ディレクトリが正しいか確認してください。続行しますか?(Y):" IF /I NOT "%CHECK_FLG%"=="Y" GOTO :END REM 対象ファイルが増えた場合は追加する REM exec.txt CALL :CHECK_FILE %CHECK_DIR\dir1\ CALL :CHECK_FILE %CHECK_DIR\dir2\ CALL :CHECK_FILE %CHECK_DIR\dir3\ PAUSE EXIT REM フォルダに配下にロックファイルが存在するかチェックする。 :CHECK_FILE CD /D %1 SET EXEC_FLG= SETLOCAL ENABLEDELAYEDEXPANSION FOR /f "delims=;" %%I IN ('dir /b /on /s *.txt') DO ( ECHO ============================================ ECHO %%I SET /P EXEC_FLG="削除しますか?(Y):" IF /I "!EXEC_FLG!"=="Y" ( DEL /Q %%I ECHO %%Iを削除しました。 ) ) ENDLOCAL EXIT /B :END EXIT
FOR文内でユーザ応答に応じて処理を実行するwindowsバッチ
■概要
BATファイルが配置されているディレクトリに存在するSQLファイルをファイル名の昇順ですべて実行する。
■課題
FOR文内でユーザ応答を行い、実行確認する箇所で詰まった。
なぜかIF文内に入らずに、EXEC_FLGが空文字になってしまった。
SETLOCAL ENABLEDELAYEDEXPANSION SET /P EXEC_FLG="続行しますか?(Y):" IF /I "!EXEC_FLG!"=="Y" ()
■解決方法
WindowsバッチではFOR文やIF文に入る前に変数が展開されるらしく
FOR文に入る前にSETしとかないといけない。
REM 遅延環境変数の展開オプション SETLOCAL ENABLEDELAYEDEXPANSION
さらに以下のようにしておかないとFOR文内でインクリメントしたのが
使えず0のままとなっていた。
ENDLOCAL && SET CNT=%CNT% && SET FILE_NUM=%FILE_NUM%
■小ネタ
①ユーザ応答の構文には、「/P」オプションをつける。
SET /P DB_INFO="接続先情報を入力して下さい(例:user/pass@schema):"
②大文字・小文字を区別させないためには、「/I」オプションを付ける。
IF文の比較時にはダブルクォーテーションを付けないと構文エラーとなる。
IF /I NOT "%CONTINUE_FLG%"=="Y" GOTO :END
③数値を扱うためには「/A」オプションをつける。
SET /A FILE_NUM=0
④現在のフォルダに移動する
PUSHD %0\..
⑤フォルダに存在するSQLファイル分処理を繰り返す。
/on:名前順、/od:日付順(古い順)、/os:サイズ順(小さい順)
FOR /f "delims=;" %%I IN ('dir /b /on *.sql') DO (
■サンプルプログラム
@ECHO OFF ECHO 本バッチファイルと同一ディレクトリに存在するSQLファイルをすべて実行します。 ECHO 処理順はSQLファイル名順に実行されます SET /P DB_INFO="接続先情報を入力して下さい(例:user/pass@schema):" ECHO 接続先:SQLPLUS %DB_INFO% SET /P CONTINUE_FLG="接続先が正しいか確認してください。続行しますか?(Y):" IF /I NOT "%CONTINUE_FLG%"=="Y" GOTO :END REM 実行フラグ SET EXEC_FLG= REM 処理対象ファイル件数 SET /A FILE_NUM=0 REM 処理件数カウンター SET /A CNT=0 REM 遅延環境変数の展開オプション SETLOCAL ENABLEDELAYEDEXPANSION REM 現在のフォルダに移動。 PUSHD %0\.. REM フォルダに存在するSQLファイルをすべて実行する。 REM /on:名前順、/od:日付順(古い順)、/os:サイズ順(小さい順) FOR /f "delims=;" %%I IN ('dir /b /on *.sql') DO ( ECHO ============================================ SET /A FILE_NUM=FILE_NUM+1 ECHO %DATE% %TIME% !FILE_NUM!件目:[SQLPLUS %DB_INFO% @%%I]を実行します。 SET /P EXEC_FLG="続行しますか?(Y):" IF /I "!EXEC_FLG!"=="Y" ( REM Y(小文字も可)が入力された場合、処理を実行する。 SQLPLUS %DB_INFO% @%%I SET /A CNT=CNT+1 ECHO %DATE% %TIME% [SQLPLUS %DB_INFO% @%%I]を完了しました。 ) ) ENDLOCAL && SET CNT=%CNT% && SET FILE_NUM=%FILE_NUM% ECHO ============================================ ECHO %DATE% %TIME% すべてのSQLが完了しました。実行件数:%CNT%件(/%FILE_NUM%件中) PAUSE EXIT :END EXIT