我正在尝试按照相当简洁的 Envers 指南中的建议运行 org.hibernate.tool.ant.EnversHibernateToolTask (表的第二行,文档有指向 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>
我以前从未做过自定义 ant 任务,所以我可能遗漏了一些非常简单的东西。有什么建议么?我不知道在 hibernatetool 任务中为类路径放置什么,除了基本的 javadoc之外,我找不到任何文档。
编辑:好的,一些特定的 Q 试图解决这个零碎的问题......
- 应该在哪个罐子
org.apache.tools.ant.Task
里,为什么蚂蚁找不到它? - 关于如何使用 HibernateToolTask 的文档在哪里?(我假设 EnversHibernateToolTask 应该工作相同)
更新(2009-06-18):好的,我终于鼓起勇气尝试在这方面取得一些进展并取得了一些进展。我可以通过做两件事让它几乎工作:
- 从命令行
ant schemaexport
而不是在 Eclipse 中运行来运行我的schemaexport
目标。(Eclipse 中的 ant 似乎找不到 org/apache/tools/ant/Task 并且我不知道如何在 eclipse 中设置 Ant 类路径(与 taskdef 项中的类路径不同;不知何故我必须告诉 ant在运行自定义任务时使用类路径来查找自己的该死类。这太疯狂了.... grrr ...) /lib/ext
通过粘贴在我的 JRE目录中,确保我的类路径包含我认为理所当然的所有 jar :- envers-1.2.0.ga-hibernate-3.3.jar
- hibernate3.jar
- 休眠工具.jar
- slf4j-log4j12-1.5.6.jar
- slf4j-api-1.5.6.jar
- log4j-1.2.15.jar
现在我遇到了一个新问题:
构建失败 C:\deka\proj\java\test-database\build.xml:61:为 JPA 创建配置时出现问题。您还记得将休眠的 EntityManager jar 添加到类路径吗?
[[[[[尖叫]]]]]
更新看来我也需要
- 休眠实体管理器.jar
- hibernate-annotations.jar
我仍然得到类加载器错误:
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)
我怎样才能在不使用 J2EE 服务器的情况下运行它?!?!?!?!?!?我还需要哪些其他 JAR 文件?我真的很困惑和沮丧。
更新(2009-06-23):我终于成功构建了。好像你需要:
* 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
并确保使用
<annotationconfiguration configurationfile="${some_path}/hibernate.cfg.xml"/>
而不是<jpaconfiguration>
示例 ant 任务中包含的项目。它仍然无法正常工作,但我没有包含 envers 表。:(