与其尝试在 Java 中构建一些东西,不如根据标准 subversion 客户端生成的 XML 输出,使用 XLST 生成您的 ANTForm 配置文件:
svn list --xml http://svn.apache.org/repos/asf/ant/ivy/core/tags > releases.xml
生成以下release.xml文件(为清楚起见,我对其进行了编辑):
<?xml version="1.0"?>
<lists>
<list path="http://svn.apache.org/repos/asf/ant/ivy/core/tags">
<entry ..>
<name>1.4.1</name>
..
</entry>
<entry ..>
<name>2.0.0</name>
..
</entry>
</list>
</lists>
例子
示例由两个文件组成
运行如下:
ant -f genGUI.xml
genGUI.xml
<project name="genGUI" default="run">
<property name="repo.url" value="http://svn.apache.org/repos/asf/ant/ivy/core/tags"/>
<property name="build.dir" location="build"/>
<property name="xsl.file" location="genGUI.xsl"/>
<property name="data.file" location="${build.dir}/data.xml"/>
<property name="run.file" location="${build.dir}/run.xml"/>
<target name="init">
<mkdir dir="${build.dir}"/>
</target>
<target name="get-data" depends="init">
<exec executable="svn" failonerror="true" output="${data.file}">
<arg line="list --xml ${repo.url}"/>
</exec>
</target>
<target name="generate" depends="get-data">
<xslt style="${xsl.file}" in="${data.file}" out="${run.file}"/>
</target>
<target name="run" depends="generate">
<ant antfile="${run.file}"/>
</target>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
</project>
genGUI.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="antform-home">${env.ANTFORM_HOME}</xsl:variable>
<xsl:template match="/">
<project name="genForm" default="menu">
<property environment="env"/>
<path id="runtime.cp">
<pathelement location="{$antform-home}/lib/antform.jar"/>
</path>
<target name="menu">
<taskdef name="antmenu" classname="com.sardak.antform.AntMenu" classpathref="runtime.cp"/>
<antmenu image="{$antform-home}/doc/images/logo-small.jpg" title="My simple form" stylesheet="{$antform-home}/style.test">
<label>Form is generated from subversion</label>
<xsl:apply-templates select="lists/list/entry"/>
</antmenu>
</target>
</project>
</xsl:template>
<xsl:template match="entry">
<button label="{name}" target="{name}"/>
</xsl:template>
</xsl:stylesheet>