2

私は Google App Engine Web アプリケーションを作成しており、サーバー側で Scala を使用したいと考えています。Eclipse と Google App Engine プラグインを使用しています。ただし、空の Scala クラス ソース ファイルをプロジェクトに追加するとすぐに、DataNucleus エンハンサーは次のように警告します。

SEVERE: クラス「com.my.package.UserAccount」が CLASSPATH に見つかりませんでした。仕様と CLASSPATH を確認してください。

最終的にはクラスを永続化する予定ですが、最初にこのエラーを取り除きたいと考えています。

これまでのところ、Scala Nature を追加し、プロジェクトをクリーンアップして Eclipse を再起動しようとしましたが、エンハンサーから同じ警告が常に表示されます。

エンハンサーを正常に実行するために何ができるかについてのアイデアはありますか?

4

2 に答える 2

2

私はここ数日間、これに苦労してきました。エンハンサーの実行時に scala-library.jar ファイルがクラスパスにないため、Scala クラスの datanucleus エンハンサーによってスローされる Class not found エラーが発生します。私は2つの解決策を見つけました:

  1. シンプルだがぎこちない: scala-library.jar を、エンハンサーを含む eclipse/plugins 内のフォルダーにコピーします。私にとって、これは現在 /opt/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.5.5.r36v201110112027/appengine-java-sdk-1.5.5/lib/tools/orm です。

  2. プロジェクト プロパティでエンハンサー ビルダーをオフにし、ant ファイルを作成して手動で実行します。その後、クラスパスを適切に制御できます。クラスパスにscala-libraryを入れるのに本当に苦労したので、あきらめて、datanucleus jarと同じフォルダーにコピーしました。誰かが興味を持っている場合の私のantファイルは次のとおりです。

<project name="DataNucleusEnhancer" default="enhance" basedir="."> 
    <property name="base.dir" location="/home/steve/Projects/DNProject"/>
    <property name="datanucleus.libs" location="/home/steve/Projects/Jar Libraries/datanucleusjars"/>
    <property name="sdk.dir" location="/opt/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.5.5.r36v201110112027/appengine-java-sdk-1.5.5"/>
    <property name="classes.dir" location="${base.dir}/war/WEB-INF/classes/"/>
    <property name="entities.dir" location="${base.dir}/war/WEB-INF/classes/packagenamehere/entities"/>

    <path id="enhancer.classpath">
        <fileset dir="${datanucleus.libs}" includes="*.jar" excludes="" />
        <fileset dir="${sdk.dir}/lib/user" includes="*.jar" />
    </path>

    <target name="enhance" description="DataNucleus enhancement">
        <taskdef name="datanucleusenhancer" classpathref="enhancer.classpath" classname="org.datanucleus.enhancer.tools.EnhancerTask" />
        <datanucleusenhancer dir="${classes.dir}" failonerror="true" verbose="true">
            <fileset dir="${entities.dir}" includes="**/*.class" />
            <classpath>
            <path location="${base.dir}/war/WEB-INF/classes/"/>
                <path refid="enhancer.classpath"/>
            </classpath>
        </datanucleusenhancer>
    </target>

</project>

テストでは、名前空間がない場合、エンハンサーがクラスを強化しようとしないこともわかりました。また、scala-library.jar のコピーを管理して、scala eclipse プラグインと同じであることを確認する必要があることも懸念しています。gae プラグインがちゃんと動くともっといいのに!

于 2011-11-10T10:39:26.747 に答える
2

スティーブの回答のオプション1を試し、 scala-library.jarをEclipseプラグインフォルダーにドロップしました。まだ解決には至っていません。次に、scala-library.jar を PROJECT/war/WEB-INF/lib/ にドロップし、ビルド パスに追加します。できます!そのため、eclipse プラグイン フォルダーから scala-library.jar を削除して eclipse を再起動することで、steve の回答のオプション 1 を元に戻します。もう一度試してみましたが、まだ機能しています。私はEclipse 2.7.1、scala 2.9.1、およびscala-ide 2.0.0を使用しています

于 2012-03-26T01:20:19.493 に答える