Sat, July 11, 2009
ANTの中でJavaScriptを使う
DocbookからFrameMakerでフォーマットするXMLに変換するビルドプロセスで 現在はMakeを使っているのだが、ANTを調べてみると、ANTでXSLTタスクがあり、 ANTからJavaScriptもつかえることが判明。
CygwinやLinuxでビルドするので、MakeからANTに移行すれば、 JavaVMさえあればOKになるので、これは魅力的です。
今回は、ANT内でJavaScriptを使う方法のメモ。
TOC
Using JavaScript in ANT その1
お約束のHelloWorld.
build.xml
<?xml version="1.0" encoding="UTF-8" ?>
<project default="main" >
<target name="main" >
<script language="javascript">
<![CDATA[
print( "Hello World." );
]]>
</script>
</target>
</project>
実行
$ ant
Buildfile: build.xml
main:
[script] Hello World.
Java6(java version "1.6.0_07") には、JavaScriptエンジンが付属しているのか?ANTをインストールしただけで、 作動しました。
- Apache Ant version 1.7.1 compiled on June 27 2008
- Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
Using JavaScript in ANT その2
今度はもう少し実用的な例。 XMLをパースして処理するつもりなので、JavaScriptからJDOMを使う場合。 ANTで設定したプロパティにJavaScriptからアクセスする。
build.xml
<?xml version="1.0" encoding="UTF-8" ?>
<project default="main" >
<target name="init" >
<property name="testfile" value="test.xml" />
</target>
<target name="main" depends="init" >
<script language="javascript" classpath="jdom.jar">
<![CDATA[
importPackage(java.io);
importPackage(org.jdom);
importPackage(org.jdom.input);
var f=project.getProperty("testfile");
var inf=File(f);
print( inf.getAbsolutePath() );
var doc=SAXBuilder().build(inf);
var eRoot=doc.getRootElement();
var list=eRoot.getChildren()
for(var i=0; i<list.size(); i++){
print( list.get(i).getChildText("title") );
}
]]>
</script>
</target>
</project>
事前準備
- カレントディレクトリに jdom.jar を用意
- パース対象となる test.xml を準備
test.xml
<?xml version="1.0" encoding="UTF-8" ?>
<blog>
<entry>
<title>Using JavaScript in Ant</title>
</entry>
<entry>
<title>Using JDOM in Ant</title>
</entry>
<entry>
<title>Using Python in Ant</title>
</entry>
</blog>
実行
ANTのプロパティ testfile にJavaScriptからアクセスして、JDOMでパース。 /blog/entry/title 要素のテキストを列挙する。
$ ant
Buildfile: build.xml
init:
main:
[script] /home/moca/osimablog/memo/src/test.xml
[script] Using JavaScript in Ant
[script] Using JDOM in Ant
[script] Using Python in Ant
次のステップ
JavaScriptの代わりにJythonを使いたいのだが、どうもうまくいかない...orz
こんな感じで使いたいのだが...
<?xml version="1.0" encoding="UTF-8" ?>
<project default="main" >
<target name="main" >
<script language="jython" >
<![CDATA[
print "hello jython"
]]>
</script>
</target>
</project>