Enversのかなり簡潔なガイドで提案されているように、org.hibernate.tool.ant.EnversHibernateToolTask を実行しようとしています(表の 2 行目、ドキュメントには PDF へのリンクがあります)。org.hibernate.tool.ant.EnversHibernateToolTask と org.hibernate.tool.ant.HibernateToolTask を正常に検出するように微調整した ant タスクを次に示します。今は 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以外のドキュメントが見つかりません。
編集:わかりました、この断片にたどり着くためのいくつかの特定の質問...
- どの jar ファイルが入っている
org.apache.tools.ant.Task
はずなのですか?なぜ ant はそれを見つけられないのですか? - HibernateToolTask の使用方法に関するドキュメントはどこにありますか? (EnversHibernateToolTask は同じように動作すると思われます)
更新(2009-06-18): OK、ついに勇気を振り絞ってこれを少し進めようと試み、少し前進しました。次の 2 つのことを行うことで、ほぼ機能するようになります。
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
- hibernate-tools.jar
- slf4j-log4j12-1.5.6.jar
- slf4j-api-1.5.6.jar
- log4j-1.2.15.jar
今、私は新しい問題を抱えています:
BUILD FAILED C:\deka\proj\java\test-database\build.xml:61: JPA の構成の作成中に問題が発生しました。hibernate EntityManager jar をクラスパスに追加したことを覚えていますか?
[[[[[悲鳴]]]]]
更新私も必要だったようです
- hibernate-entitymanager.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 テーブルが含まれていません。:(