まほろば技術パーク

@komeshogun's InfoTech MEMO

SvnAntとAntでチェックアウトからコンパイルまで自動化する

やりたかったことは
SVNからチェックアウト
・自動でコンパイル
とめっちゃ単純なことをやりたい。

Jenkisでやろうかなと思ったけど、訳ありインストールせずに
出来る必要があったので、Antで出来ないかなと調べた結果を残しときます。

①Antってなんぞい?

1. Antの基礎 | TECHSCORE(テックスコア)

http://www.techscore.com/tech/Java/ApacheJakarta/Ant/1/

これを小一時間読んで理解できました。

ビルドファイルの書き方を理解すれば十分。

 

Eclipseから自動作成して、整形。

ファイル -> エクスポート -> 一般 -> Antビルド・ファイルで
さくっと出来ます。

 

クラウドサービスプラットフォーム Cosminexus:Antのbuild.xmlEclipseから自動生成するには?:ソフトウェア:日立
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.xmlsvnタスクをかける準備が出来た

 

subclipse:
http://subclipse.tigris.org/svnant.html

 

build.xmlsvnの宣言を書き足す。

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

誰かの参考になればコレ幸い。