Разрешение XSD с помощью Ivy

Простите двойной пост, но я очень хочу ответить на это.

Я хотел бы получить совет относительно подхода, который я использую. Я использую Ivy для управления зависимостями и могу без проблем загружать и использовать все свои файлы jar. Я хотел бы также запустить задачу <schemavalidate> в Ant и хотел бы использовать Ivy для загрузки xsd и dtd, как указано, тем самым устраняя необходимость в сетевом подключении после первоначальной загрузки, а также сокращая время сборки. Я думаю, что у меня есть решение, но я хотел проверить его на несколько дополнительных глаз для проверки работоспособности и предложений по возможным улучшениям. Ниже приведены соответствующие части моих сценариев сборки. Первый вызов для извлечения использует мой файл ivysettings.xml по умолчанию, а второй вызов использует файл настроек, специфичный для получения xsd и dtd. Любая обратная связь будет оценена.

build.xml:

<project etc>
    ...

    <target name="resolve" description="Retrieve dependencies with ivy">
        <ivy:retrieve refresh="true"
                  sync="true"
                  conf="compile,war,runtime,test,findbugs"
                  pattern="${ivy.lib.dir}/[conf]/[artifact]-[revision].[ext]"/>
        <ivy:settings id="xsd.settings" 
                      file="${search.server.home}/ivysettings-xsd.xml"/>
        <ivy:retrieve settingsref="xsd.settings"
                  refresh="false"
                  sync="false"
                  conf="xmlentities"
                  pattern="${ivy.lib.dir}/[conf]/[artifact].[ext]"/>
    </target>
    ...
</project>

плющ.xml:

<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
    <dependencies>
        <!-- Jar files defined here but removed for brevity -->
        ...
        <dependency org="beans" name="spring-beans" rev="3.0" conf="xmlentities->default">
            <artifact name="spring-beans" type="xsd"/>
        </dependency>
        <dependency org="context" name="spring-context" rev="3.0" conf="xmlentities->default">
            <artifact name="spring-context" type="xsd"/>
        </dependency>
        <dependency org="mvc" name="spring-mvc" rev="3.0" conf="xmlentities->default">
            <artifact name="spring-mvc" type="xsd"/>
        </dependency>
        <dependency org="tool" name="spring-tool" rev="3.0" conf="xmlentities->default">
            <artifact name="spring-tool" type="xsd"/>
        </dependency>
        <dependency org="util" name="spring-util" rev="3.0" conf="xmlentities->default">
            <artifact name="spring-util" type="xsd"/>
        </dependency>
        <dependency org="javaee" name="javaee" rev="5" conf="xmlentities->default">
            <artifact name="javaee_5" type="xsd"/>
            <artifact name="web-app_2_5" type="xsd"/>
            <artifact name="javaee_web_services_client_1_2" type="xsd"/>
            <artifact name="jsp_2_1" type="xsd"/>
        </dependency>
        <dependency org="xmlschema" name="xmlschema" rev="2001" conf="xmlentities->default">
            <artifact name="XMLSchema" type="xsd"/>
            <artifact name="xml" type="xsd"/>
        </dependency>
    </dependencies>
</ivy-module>

ivysettings-xsd.xml:

<?xml version="1.0" encoding="UTF-8"?>
<ivysettings>
    <settings defaultResolver="namespaces"/>
    <resolvers>
        <chain name="namespaces" returnFirst="true">
            <url name="w3-org-ns" checksums="">
                <artifact pattern="http://www.w3.org/2001/[artifact].[ext]"/>
            </url>
            <url name="javaee-ns" checksums="">
                <artifact pattern="http://java.sun.com/xml/ns/javaee/[artifact].[ext]"/>
            </url>
            <url name="spring-ns" checksums="">
                <artifact pattern="http://www.springframework.org/schema/[organisation]/[artifact].[ext]"/>
            </url>
        </chain>
    </resolvers>
</ivysettings>

Бен


person Ben Sion    schedule 28.06.2010    source источник
comment
Я не понимаю, почему вы выполняете два действия по извлечению, а не просто извлекаете XSD и DTD одновременно с банками. Что мне не хватает?   -  person Tom Howard    schedule 12.05.2011


Ответы (1)


Интересная проблема. Кэширование файлов схемы обеспечивает автономную проверку.

Как сказал Том, я думаю, что требуется только одно извлечение. (Мой пример извлекает как файлы jar, так и файлы схемы)

<ivy:retrieve pattern="${lib.dir}/[conf]/[artifact]-[revision].[ext]"/>

Я предложил некоторые изменения в файлах ivy и settings.

плющ.xml

Я использовал дополнительные атрибуты ivy, чтобы помочь с генерация URL-адресов Spring Schema:

<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
    <info organisation="com.myspotontheweb.demo" module="spring"/>

    <configurations defaultconfmapping="compile->default">
        <conf name="compile" description="Compile dependencies"/>
        <conf name="schemas" description="XML schema files"/>
    </configurations>

    <dependencies>
        <!-- Compile depedencies -->
        <dependency org="org.springframework" name="spring-core" rev="3.0.6.RELEASE"/>

        <!-- Schema dependencies -->
        <dependency org="org.springframework" name="schemas" rev="3.0" conf="schemas->default">
            <artifact name="spring-beans"   e:framework="beans" type="xsd"/>
            <artifact name="spring-context" e:framework="context" type="xsd"/>
            <artifact name="spring-mvc"     e:framework="mvc"   type="xsd"/>
            <artifact name="spring-tool"    e:framework="tool"  type="xsd"/>
            <artifact name="spring-util"    e:framework="util"  type="xsd"/>
        </dependency>

        <dependency org="com.sun.java" name="schemas" rev="5" conf="schemas->default">
            <artifact name="javaee_5"    type="xsd"/>
            <artifact name="web-app_2_5" type="xsd"/>
            <artifact name="javaee_web_services_client_1_2" type="xsd"/>
            <artifact name="jsp_2_1"     type="xsd"/>
        </dependency>

        <dependency org="org.w3" name="schemas" rev="2001" conf="schemas->default">
            <artifact name="XMLSchema" type="xsd"/>
            <artifact name="xml"       type="xsd"/>
        </dependency>
    </dependencies>
</ivy-module>

ivysettings.xml

Настройте ivy для использования репозиториев Maven по умолчанию. Используйте объявление modules, чтобы направить модули специальной схемы в ваши преобразователи URL.

<ivysettings>
    <settings defaultResolver="maven-repos"/>
    <resolvers>
        <chain name="maven-repos">
            <ibiblio name="central" m2compatible="true"/>
            ..
            Other Maven repositories go here
            ..
        </chain>
        <url name="spring-schemas">
            <artifact pattern="http://www.springframework.org/schema/[framework]/[artifact].[ext]"/>
        </url>
        <url name="javaee-schemas">
            <artifact pattern="http://java.sun.com/xml/ns/javaee/[artifact].[ext]"/>
        </url>
        <url name="w3-schemas">
            <artifact pattern="http://www.w3.org/2001/[artifact].[ext]"/>
        </url>
    </resolvers>
    <modules>
        <module organisation="org.springframework" name="schemas" resolver="spring-schemas"/>
        <module organisation="com.sun.java" name="schemas" resolver="javaee-schemas"/>
        <module organisation="org.w3"       name="schemas" resolver="w3-schemas"/>
    </modules>
</ivysettings>
person Mark O'Connor    schedule 20.09.2011
comment
Привет Марк, спасибо за совет. Мне нравится внешний вид дополнительных атрибутов. Это действительно элегантное решение проблемы. Прошло некоторое время с тех пор, как я сделал это и опубликовал, но, если я правильно помню, я разделил поиск банок и xsd, чтобы разделить проблемы. Оглядываясь назад, это, вероятно, не лучшая идея. - person Ben Sion; 22.09.2011