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やったりが流行っているけど
古典的なやり方でも十分やね。
古典的なやり方と思ってたけど、英語サイトしかひっかからなかったのはなんでだろう。あんまりこんなしょぼいことにならないのかな^^;
誰かの参考になればコレ幸い。