试图运行org.hibernate.tool.ant.EnversHibernateToolTask​​时遇到绊脚石

时间:2009-06-04 20:29:06

标签: java hibernate ant hibernate-envers

我正在尝试按照rather terse guide to Envers中的建议运行org.hibernate.tool.ant.EnversHibernateToolTask​​(表格第2行,文档有PDF链接)。这是我的ant任务调整,所以它成功找到org.hibernate.tool.ant.EnversHibernateToolTask​​和org.hibernate.tool.ant.HibernateToolTask​​;现在它找不到org.apache.tools.ant.Task,我有一种下沉的感觉,我做错了。

<target name="schemaexport" depends="init"
        description="Exports a generated schema to DB and file">
<taskdef name="hibernatetool"
    classname="org.hibernate.tool.ant.EnversHibernateToolTask"
        classpath=".;C:\appl\Java\jre6u13\lib\ext\envers-1.2.0.ga-hibernate-3.3.jar;C:\appl\Java\jre6u13\lib\ext\hibernate-tools.jar" />
<!--classpathref="${schema.classpath}"/>-->
<hibernatetool destdir=".">
    <classpath>
        <fileset refid="lib.hibernate" />
        <path location="${build.dir}" />
    </classpath>
<jpaconfiguration persistenceunit="ConsolePU" />
<hbm2ddl
    drop="false"
    create="true"
    export="false"
    outputfilename="versioning-ddl.sql"
    delimiter=";"
    format="true"/>
</hibernatetool>
</target>

我之前从未做过自定义蚂蚁任务,所以我可能会遗漏一些非常简单的东西。有什么建议?我不知道在hibernatetool任务中为classpath添加什么,我找不到rudimentary javadoc以外的任何文档。

编辑好的,一些特定的Q试图让这个零碎...

  1. 哪个罐子应该是org.apache.tools.ant.Task,为什么蚂蚁不能找到它?
  2. 关于如何使用HibernateToolTask​​的文档在哪里? (我假设EnversHibernateToolTask​​应该工作相同)
  3. 更新(2009-06-18):好的,我终于鼓起勇气试图在这方面取得一些进展并取得了一些进展。我可以做两件事来完成它的工作:

    1. 从命令行运行ant schemaexport,而不是从Eclipse中运行schemaexport来运行我的/lib/ext目标。 (Eclipse中的ant似乎无法找到org / apache / tools / ant / Task而且我不知道如何在eclipse中设置Ant类路径(与taskdef项目中的类路径不同;不知何故我必须告诉ant在运行自定义任务时使用类路径查找自己的该死的类。这是疯狂的.... grrr ...)
    2. 通过坚持我的JRE的BUILD FAILED java.lang.NoClassDefFoundError: javax/persistence/PersistenceException at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) at java.lang.Class.getConstructor0(Class.java:2699) at java.lang.Class.newInstance0(Class.java:326) at java.lang.Class.newInstance(Class.java:308) at org.hibernate.tool.ant.JPAConfigurationTask.createConfiguration(JPACo nfigurationTask.java:33) at org.hibernate.tool.ant.ConfigurationTask.getConfiguration(Configurati onTask.java:54) 目录,确保我的类路径包含我认为理所当然的所有jar:

      • envers-1.2.0.ga-冬眠-3.3.jar
      • hibernate.jar文件
      • 冬眠-的tools.jar
      • SLF4J-log4j12-1.5.6.jar
      • slf4j-api-1.5.6.jar
      • 的log4j-1.2.15.jar
    3. 现在我遇到了一个新问题:

        

      建立失败   C:\ DEKA \凸出\​​的java \测试数据库\ build.xml中:61:   创建配置的问题   为JPA。你有没有记得补充一下   hibernate EntityManager jars to the   班级路径?

      [[[[[尖叫]]]]]

      更新看来我还需要

      • 冬眠-entitymanager.jar
      • 冬眠-annotations.jar

      我仍然得到类加载器错误:

      * envers-1.2.0.ga-hibernate-3.3.jar
      * hibernate3.jar
      * hibernate-tools.jar
      * slf4j-log4j12-1.5.6.jar
      * slf4j-api-1.5.6.jar 
      * log4j-1.2.15.jar
      * dom4j-1.6.1.jar
      * hibernate-commons-annotations.ja
      * a JAR containing JTA classes (Sun doesn't have a JAR file but you can download the [class files][3] yourself and make a JAR file out of it)
      * a JAR containing JPA classes (I used toplink-essentials.jar from the glassfish project, per [this SO question][4])
      * commons-logging-1.1.1.jar
      * freemarker.jar
      

      如何运行此w / o必须使用J2EE服务器?!?!?!?!?!?我需要哪些其他JAR文件?我真的很困惑和沮丧。

      更新(2009-06-23):我终于成功了。似乎你需要:

      <annotationconfiguration configurationfile="${some_path}/hibernate.cfg.xml"/>
      

      并确保使用

      <jpaconfiguration>

      而不是示例ant任务中包含的{{1}}项。它仍然无法正常工作,我没有包括envers表。 :(

2 个答案:

答案 0 :(得分:1)

EnversHibernateToolTask​​扩展了HibernateToolTask​​。我需要做的就是以下几点:

<taskdef name="hibernatetool"
classname="org.hibernate.tool.ant.EnversHibernateToolTask"
        classpath="envers-1.2.0.ga-hibernate-3.3.jar" />

否则,查看已粘贴的ant文件的输出会很有帮助。

答案 1 :(得分:-2)

你可能需要 EJB3余辉-1.0.2.GA.jar