Добавьте класс scala в энхансер DataNucleus CLASSPATH - PullRequest
2 голосов
/ 04 ноября 2011

Я пишу веб-приложение Google App Engine и хочу использовать Scala на стороне сервера. Я использую Eclipse и плагин Google App Engine. Однако, как только я добавляю пустой исходный файл класса Scala в свой проект, энхансер DataNucleus предупреждает:

SEVERE: класс "com.my.package.UserAccount" не найден в CLASSPATH. Пожалуйста, проверьте вашу спецификацию и ваш CLASSPATH.

В конце концов я перейду к тому, чтобы сделать класс постоянным, но сначала я хочу избавиться от этой ошибки.

Пока что я добавил Scala Nature и попытался очистить проект, а также перезапустить Eclipse, но я всегда получаю одно и то же предупреждение от энхансера.

Любые идеи о том, что я могу сделать, чтобы заставить энхансер успешно работать?

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

Я попробовал вариант 1 ответа Стива , сбросив файл scala-library.jar в папку подключаемых модулей eclipse. Это все еще не решает еще. Затем я помещаю файл scala-library.jar в PROJECT / war / WEB-INF / lib / и добавляю его в путь сборки. Оно работает! Поэтому я отменил вариант 1 ответа Стива, удалив scala-library.jar из папки плагина eclipse и перезапустив eclipse. Я пытаюсь снова, и это все еще работает! Я использую eclipse 2.7.1, scala 2.9.1 и scala-ide 2.0.0

2 голосов
/ 10 ноября 2011

Я боролся с этим последние несколько дней. Ошибки класса not found, выдаваемые энхансером datanucleus в классах Scala, происходят из-за того, что файл 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 в путь к классам, поэтому сдался и скопировал ее в ту же папку, что и мои банки с датануклеусом. Мой файл муравья, если кому-то интересно, это:

<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 работал правильно!

...