3

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以外のドキュメントが見つかりません。

編集:わかりました、この断片にたどり着くためのいくつかの特定の質問...

  1. どの jar ファイルが入っているorg.apache.tools.ant.Taskはずなのですか?なぜ ant はそれを見つけられないのですか?
  2. HibernateToolTask​​ の使用方法に関するドキュメントはどこにありますか? (EnversHibernateToolTask​​ は同じように動作すると思われます)

更新(2009-06-18): OK、ついに勇気を振り絞ってこれを少し進めようと試み、少し前進しました。次の 2 つのことを行うことで、ほぼ機能するようになります。

  1. ant schemaexportEclipse 内からではなくコマンド ラインから実行して、ターゲットschemaexportを実行します。(Eclipse の ant は org/apache/tools/ant/Task を見つけることができないようで、Eclipse で Ant クラスパスを設定する方法がわかりません (taskdef 項目のクラスパスとは異なります。どういうわけか、ant に指示する必要があります)。カスタムタスクを実行するときに、クラスパスを使用して独自のいまいましいクラスを見つけます.これは正気ではありません.... grrr...)
  2. /lib/extJREのディレクトリに貼り付けることで、クラスパスにすべての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 テーブルが含まれていません。:(

4

2 に答える 2

1

EnversHibernateToolTask​​ は HibernateToolTask​​ を拡張します。私がする必要があったのは次のことだけでした:

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

それ以外の場合は、貼り付けた ant ファイルの出力を確認すると便利です。

于 2009-06-05T14:44:37.170 に答える
-2

ejb3-persistence-1.0.2.GA.jar が必要かもしれません

于 2009-08-02T02:24:13.273 に答える