Ах, я думаю, я знаю проблему. В своем задании xslt
вы указали xmlcatalog
:
<xmlcatalog>
<dtd publicId="-//Hibernate/Hibernate Mapping DTD//EN"
location="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"/>
</xmlcatalog>
xmlcatalog
используется, чтобы помочь задаче xslt
найти DTD и другие элементы, необходимые для синтаксического анализа и проверки XML. Если вы перейдете по URL, указанному вами как location
, вы получите DTD. (Какой Firefox показывает пустую страницу, но при просмотре «источника страницы» вы видите содержимое DTD.) Поскольку DTD фактически присутствует по этому URL, я не знаю точно, почему сборка имела проблему с чтением этого DTD может быть, есть разница в кодировке или сайт не отвечает должным образом. Если вы запустите ANT с параметром -verbose
, вы увидите больше сброса стека вокруг сбоя, если вы действительно захотите его отладить. Вы бы увидели оригинал Exception
, завернутый в Exception
, который вы видели.
В любом случае, если вы загрузите DTD, о котором идет речь, а затем укажите свой location
в элементе dtd
в локальном файле, как вы это сделали:
<xmlcatalog>
<dtd publicId="-//Hibernate/Hibernate Mapping DTD//EN"
location="${base.configuration.hibernate.dir}/hibernate-mapping-3.0.dtd"/>
</xmlcatalog>
тогда парсер сможет найти DTD, в котором он нуждается, гарантированно, и он отлично работает.
Так что да, ваше решение - правильное решение. Таким образом, ваши сборки не зависят от доступности внешнего веб-сайта и наличия файла.