我正在撰写Google App Engine网络应用,并希望在服务器端使用Scala。我正在使用Eclipse和Google App Engine插件。但是,只要我将一个空的Scala类源文件添加到我的项目中,DataNucleus增强器就会发出警告:
严重:未找到“com.my.package.UserAccount”类 CLASSPATH。请检查您的规格和CLASSPATH。
我最终会让这个类持久化,但我想首先摆脱这个错误。
到目前为止,我已经添加了Scala Nature,并尝试清理项目并重新启动Eclipse,但我总是从增强器发出相同的警告。
关于如何让增强器成功运行的任何想法?
答案 0 :(得分:2)
过去几天我一直在努力解决这个问题。由于scala-library.jar文件在增强器运行时不在类路径中,因此scala类上的datanucleus增强器抛出了类未找到的错误。我找到了两个解决方案:
简单而又笨重:将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
在项目属性中关闭增强器构建器并创建一个ant文件以手动运行它。然后,您可以正确控制类路径。我真的很难将scala-library放入类路径中,所以放弃并将其复制到与我的datanucleus jar相同的文件夹中。我的蚂蚁文件,如果有人感兴趣的是:
<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插件正常工作会好得多!
答案 1 :(得分:2)
我试着the option 1 of steve's answer删除eclipse插件文件夹中的scala-library.jar。它还没有解决。然后我在PROJECT / war / WEB-INF / lib /中删除scala-library.jar并将其添加到Build Path。有用!所以我通过从eclipse插件文件夹中删除scala-library.jar来重新启动eclipse,从而撤消steve的答案1的答案。我再试一次,它仍然有效!我使用的是eclipse 2.7.1,scala 2.9.1和scala-ide 2.0.0