2

Mavenプロジェクトのエンティティに対してHibernateインストルメンテーションを有効にしようとしています。インストルメンテーションは、Java API(String、BigDecimalなど)によって定義された標準タイプのフィールドのみを持つエンティティで正常に機能するようですが、インストルメンテーションタスクが、プロジェクト内の他のクラスによって定義されたタイプのフィールドを持つクラスで機能しようとすると、次のエラーで失敗します。

[instrument] processing class : com.test.entity.EntityWithCustomTypes;  file = C:\Project\Project-ejb\target\classes\com\test\entity\EntityWithCustomTypes.class
Mar 21, 2013 10:00:24 AM org.hibernate.bytecode.internal.javassist.JavassistClassTransformer doTransform
ERROR: HHH000373: Unable to transform class: cannot find com.test.bo.CustomType

CustomTypeクラスを意図的にインストルメント化しようとしました(これは必要ではないはずです)。インストルメンテーションはそれを処理しますが、それでもEntityWithCustomTypesでエラーが発生します。

これが私のpom.xmlで使用しているプラ​​グインです。プロジェクトはJBoss7Java EEアーキタイプを使用して生成され、EJBモジュールPOMでインストルメンテーションを実行しようとしています。

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.3</version>
    <executions>
        <execution>
            <configuration>
                <tasks>
                    <taskdef name="instrument" classname="org.hibernate.tool.instrument.javassist.InstrumentTask">
                        <classpath>
                            <path refid="maven.dependency.classpath" />
                            <path refid="maven.compile.classpath" />
                            <path refid="maven.runtime.classpath" />
                            <path refid="maven.plugin.classpath" />
                            <dirset dir="${project.build.outputDirectory}" />
                        </classpath>
                    </taskdef>
                    <instrument verbose="false">
                        <fileset dir="${project.build.outputDirectory}">
                            <include name="**/entity/*.class" />
                        </fileset>
                    </instrument>
                </tasks>
            </configuration>
            <phase>package</phase>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.1.10.Final</version>
        </dependency>
        <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.12.1.GA</version>
        </dependency>
    </dependencies>
</plugin>

コンパイルフェーズで問題のクラス(CustomType)が生成されていることを確認できるため、HibernateのJavassistClassTransformerがそれを見つけられない理由がわかりません。

4

3 に答える 3

1

これはjavassist-3.15.0に関連しているようです。私たちにとっては、新しいバージョン(3.17.1)が機能しましたが、このバージョンはプロキシを大幅に破壊するため(https://hibernate.atlassian.net/browse/HHH-7884)、Hibernateチームは3.15.0に戻ることにしました。 。

結局、ここでも同じ問題が発生します...

于 2013-03-21T15:34:24.860 に答える
1

最新の Hibernate 4.2.7 SP1 は Javassist 3.18.0 を使用し、議論された問題を最終的に解決します。

于 2013-10-24T06:25:28.117 に答える
0

私の現在のアプローチは、インストルメンテーションに javassist 3.17.1 を使用し、アプリケーションの war ファイルに javassist 3.15.0 をデプロイすることです。これが便利に機能することを願っています...

更新:これまでのところうまくいくようですが、これは本当に醜い回避策です...

于 2013-03-22T07:22:24.463 に答える