Hibernate Ant:使用<;xslt>;任务
我尝试在Ant中使用Hibernate Ant:使用<;xslt>;任务,hibernate,xslt,ant,build,Hibernate,Xslt,Ant,Build,我尝试在Ant中使用xslt任务来使用xslt修改Hibernate映射文件(*.hbm.xml)。然而,我不断得到一个com.sun.org.apache.xml.internal.utils.wrappedruntimeeException 如果我拿出!DOCTYPE声明在源xml文件中,以下目标运行时没有任何错误。有人能告诉我我做错了什么吗?谢谢 这是我的蚂蚁目标: <target name="generatePermHbmXml"> <xslt in="${base
xslt
任务来使用xslt修改Hibernate映射文件(*.hbm.xml
)。然而,我不断得到一个com.sun.org.apache.xml.internal.utils.wrappedruntimeeException
如果我拿出!DOCTYPE
声明在源xml文件中,以下目标运行时没有任何错误。有人能告诉我我做错了什么吗?谢谢
这是我的蚂蚁目标:
<target name="generatePermHbmXml">
<xslt in="${base.configuration.hibernate.dir}\Test.hbm.xml"
out="${base.configuration.hibernate.dir}\TestPerm.hbm.xml"
style="${base.configuration.hibernate.dir}\perm.xsl">
<xmlcatalog>
<dtd publicId="-//Hibernate/Hibernate Mapping DTD//EN"
location="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"/>
</xmlcatalog>
</xslt>
</target>
[编辑]这是我为使其正常工作而删除的DOCTYPE
<!DOCTYPE hibernate-mapping
PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
我找到了一个解决方案,但我不知道这是否是“正确”的方法。我下载了DTD文件并将其放在我的项目目录中。我引用了这个文件(如下所示)而不是URL,它现在似乎可以工作了
<xmlcatalog>
<dtd publicId="-//Hibernate/Hibernate Mapping DTD//EN"
location="${base.configuration.hibernate.dir}/hibernate-mapping-3.0.dtd"/>
</xmlcatalog>
啊,我想我知道问题所在。在
xslt
任务中,指定了xmlcatalog
:
<xmlcatalog>
<dtd publicId="-//Hibernate/Hibernate Mapping DTD//EN"
location="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"/>
</xmlcatalog>
然后解析器可以找到它所需要的DTD,保证它正常工作
是的,你的解决方案是正确的。通过这种方式,您的构建不依赖于外部网站的可访问性和可用文件。那么,DOCTYPE声明是什么?当您删除它时,它会起什么作用?正如上面的帖子中所添加的,我认为这是一个标准的hibernate DTD,我从hibernate站点上取下。
<xmlcatalog>
<dtd publicId="-//Hibernate/Hibernate Mapping DTD//EN"
location="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"/>
</xmlcatalog>
<xmlcatalog>
<dtd publicId="-//Hibernate/Hibernate Mapping DTD//EN"
location="${base.configuration.hibernate.dir}/hibernate-mapping-3.0.dtd"/>
</xmlcatalog>