2

我正在编写一个 Google App Engine 网络应用程序并希望在服务器端使用 Scala。我正在使用 Eclipse 和 Google App Engine 插件。但是,只要我将一个空的 Scala 类源文件添加到我的项目中,DataNucleus 增强器就会发出警告:

严重:在 CLASSPATH 中找不到类“com.my.package.UserAccount”。请检查您的规范和您的 CLASSPATH。

我最终会让课程持久化,但我想首先摆脱这个错误。

到目前为止,我已经添加了 Scala Nature,并尝试清理项目并重新启动 Eclipse,但我总是收到增强器发出的相同警告。

关于我可以做些什么来让增强器成功运行的任何想法?

4

2 回答 2

2

在过去的几天里,我一直在努力解决这个问题。Scala 类上的 datanucleus 增强器引发的 Class not found 错误发生是因为增强器运行时 scala-library.jar 文件不在类路径中。我找到了两种解决方案:

  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/ 中,并将其添加到 Build Path 中。有用!因此,我通过从 eclipse 插件文件夹中删除 scala-library.jar 并重新启动 eclipse 来撤消史蒂夫回答的选项 1。我再试一次,它仍然有效!我正在使用 eclipse 2.7.1、scala 2.9.1 和 scala-ide 2.0.0

于 2012-03-26T01:20:19.493 回答