Получение списка каталогов из SVN для использования в раскрывающемся списке ANT - PullRequest
3 голосов
/ 20 августа 2010

Я немного погуглил по этому вопросу, но я не могу найти ничего, что мне нужно.

Я использую ANTForms для GUI в нашем развертывании. Разработчики могут выбрать сборку из динамически заполненного выпадающего списка , нажать «ОК» и все готово.

Способ, которым выпадающий список динамически заполняется в данный момент, заключается в том, что ANT выполняет HTTP-запрос веб-службы к нашему серверу ColdFusion, предоставляя ему список необходимых каталогов SVN. Затем CF использует немного подчеркивания Java для вызова SVNKit и возврата результата запроса для обработки CF. Он преобразует это в разделенный запятыми список, выводит его для ANT, а затем создает эти параметры раскрывающихся списков.

Я использую CF, потому что это наш основной язык. Я на самом деле не знаю Java, но что меня немного беспокоит, так это то, что если я знаю, я смогу заставить ANT напрямую общаться с Java / SVNKit и, следовательно, полностью обрезать CF. Вероятно, это также устранит необходимость в HTTP-вызове, поскольку настройка SVN является локальной, поэтому существует увеличение скорости + это устраняет зависимость от внешнего источника.

Кто-нибудь делал это, или вы знаете какие-нибудь рабочие примеры, которые я видел, которые показывают, что ANT говорит с SVNKit напрямую, чтобы делать такие вещи?

Я посмотрел на обычные задачи SVN ANT в Subclipse, но у них нет никакого способа сделать это.

Любая помощь приветствуется, Джеймс

1 Ответ

2 голосов
/ 20 августа 2010

Вместо того, чтобы пытаться что-то построить в Java, почему бы не сгенерировать файл конфигурации ANTForm с помощью XLST, основываясь на выводе XML, полученном стандартным клиентом Subversion:

svn list --xml http://svn.apache.org/repos/asf/ant/ivy/core/tags > releases.xml

Создает следующий releases.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>

Пример

Пример состоит из двух файлов

  • genGUI.xml
  • genGUI.xsl

Выполнить следующим образом:

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...