使用ANT从JPA / Hibernate批注类创建DDL脚本

时间:2012-06-02 00:22:44

标签: sql hibernate java-ee orm ant

我想使用ANT从Hibernate / JPA Annotation Classes生成SQL DDL脚本。

以下是我根据Hibernate Dev Docs URL编写的ANT脚本:http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html_single/

   <project name="yourmarketnet" default="all" basedir=".">
<target name="ddl_generation">
<!-- paths to required jars  -->
<path location="web/WEB-INF/lib/hibernate-annotations.jar" />
<path location="web/WEB-INF/lib/ejb3-persistence.jar" />
<path location="web/WEB-INF/lib/hibernate-entitymanager.jar" />
<path location="web/WEB-INF/lib/javaassist.jar" />
<path location="web/WEB-INF/lib/hibernate-tools.jar"/>
<taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask.jar">
     <classpath path="${build.dir}/web/WEB-INF/lib/hibernate-tools.jar"/> 
    </taskdef>
<!-- output destination -->
<hibernatetool destdir="${build.dir}">
    <!-- were the annotation beans files are located-->
<classpath>
<path location="${build.dir}/web/WEB-INF/classes/com/yourmarketnet/beans" />
</classpath>
<!-- list exporters here -->
<hbm2ddl
export="false"
update="false"
drop="true"
create="true"
outputfilename="myApps.ddl"
delimiter=";"
format="false"
haltonerror="true"/>
</hibernatetool>
</target>
</project>

我得到ERROR taskdef类org.hibernate.tool.ant.HibernateToolTask​​无法找到  使用类加载器AntClassLoader []

我还检查了hibernate-tools.jar是否实际上在路径中,它是(C:\ Users \ naim \ Documents \ NetBeansProjects \ yourmarketnet \ build \ web \ WEB-INF \ lib \ hibernate-tools。罐)

有人可以一步一步告诉我如何解决/调试此问题,谢谢。

1 个答案:

答案 0 :(得分:1)

错误消息清楚地告诉您蚂蚁无法找到您的工具。当你宣布

<taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" >
   <classpath path="${build.dir}/web/WEB-INF/lib"/>
</taskdef>

它已经错了,因为工具类不在目录中,而是在jar中。其次,您的意图似乎是使用${build.dir}作为输出位置,那么为什么它会包含工具类?无论如何,你甚至没有定义这个目录。

所以如果你真的在hibernate-tools.jar中拥有web/WEB-INF/lib,那么你可能需要像

这样的东西
<taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" >
   <classpath path="web/WEB-INF/lib/hibernate-tools.jar"/>
</taskdef>

请注意,它与您的项目目录相关。