在过去的几天里,我一直在努力解决这个问题。Scala 类上的 datanucleus 增强器引发的 Class not found 错误发生是因为增强器运行时 scala-library.jar 文件不在类路径中。我找到了两种解决方案:
简单但笨拙:将 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 相同的文件夹中。如果有人感兴趣,我的 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插件能正常工作就更好了!