JDO3.0 усиливает сбой в GAE 1.7.2

Я использую ant для создания своего веб-приложения GAE. Это цель datanucleus:

<target name="datanucleusenhance" depends="compile"
    description="Performs enhancement on compiled data classes.">
    <enhance_war war="war">
    </enhance_war>
</target>

Это ошибка, которую я получил:

org.datanucleus.exceptions.NucleusException: плагин (пакет) "org.datanucleus" уже зарегистрирован. Убедитесь, что у вас нет нескольких версий JAR одного и того же плагина в пути к классам. URL-адрес «файл:/home/xxxx/.eclipse/org.eclipse.platform_4.2.0_1473617060/plugins/com.google.appengine.eclipse.sdkbundle_1.7.2/appengine-java-sdk-1.7.2/lib/opt/ tools/datanucleus/v1/datanucleus-core-1.1.5.jar» уже зарегистрирован, и вы пытаетесь зарегистрировать идентичный плагин, расположенный по адресу «file:/war/WEB-INF/lib/datanucleus-core-3.1. 0-м5.банка."

Я пробовал эту цель муравья:

<target name="datanucleusenhance" depends="compile" description="Performs enhancement on compiled data classes.">
    <enhance_war war="war">
        <args>
            <arg value="-enhancerVersion" />
            <arg value="v3.1.0" />
        </args>
    </enhance_war>
</target>

Я пытался удалить "datanucleus-core-1.1.5.jar". Ошибка тогда такая:

java.lang.RuntimeException: Unexpected exception
    at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:76)
    at com.google.appengine.tools.enhancer.Enhance.<init>(Enhance.java:71)
    at com.google.appengine.tools.enhancer.Enhance.main(Enhance.java:51)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:74)
    ... 2 more
Caused by: java.lang.NoClassDefFoundError: org/datanucleus/OMFContext
    at org.datanucleus.enhancer.DataNucleusEnhancer.<init>(DataNucleusEnhancer.java:172)
    at org.datanucleus.enhancer.DataNucleusEnhancer.<init>(DataNucleusEnhancer.java:150)
    at org.datanucleus.enhancer.DataNucleusEnhancer.main(DataNucleusEnhancer.java:1157)
    ... 7 more
Caused by: java.lang.ClassNotFoundException: org.datanucleus.OMFContext
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at com.google.appengine.tools.enhancer.EnhancerLoader.loadClass(EnhancerLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 10 more

Как я могу использовать JDO3.0 с GAE1.7.2?


person De Cai    schedule 27.09.2012    source источник


Ответы (3)


Кажется, вы путаете, какие версии зависимых банок использовать. GAE 1.7.2 использует подключаемый модуль GAE JDO/JPA v2.x, для которого, в свою очередь, требуется DataNucleus 3.x. Очевидно, у вас есть (различные) банки DataNucleus 1.x.

person DataNucleus    schedule 27.09.2012
comment
Получил ответ. Правильная цель муравья должна быть следующей: ‹target name=datanucleusenhance depend=compile description=Выполняет усовершенствование скомпилированных классов данных.› ‹enhance_war war=war› ‹args› ‹arg value=-enhancerVersion /› ‹arg value=v2 /› ‹ /args› ‹/enhance_war› ‹/target› версия — это версия DN. :) - person De Cai; 27.09.2012
comment
Нет, это версия подключаемого модуля GAE JDO/JPA. DataNucleus — это совершенно отдельный проект и программное обеспечение (которое используется плагином Google). - person DataNucleus; 27.09.2012

Используя плагин GAE для Intellij, мне пришлось удалить настроенный по умолчанию каталог orm и специально добавить библиотеки более высоких версий.

GAE SDK организован следующим образом:

/lib/user/orm (default persistence libraries I removed)

И

/lib/opt/user/datanucleus/v2

Чтобы получить доступ к этой конфигурации в IntelliJ, из контекстного меню моего проекта:

{context menu} -> Open Module Settings -> Libraries -> AppEngine ORM 
  • Используйте кнопку [-], чтобы удалить банки в этом каталоге: /lib/user/orm
  • Используйте кнопку [+], чтобы добавить банки в этот каталог: /lib/opt/user/datanucleus/v2
person Doug DesCombaz    schedule 06.01.2013

Получил ответ. Правильная цель муравья должна быть:

<target name="datanucleusenhance" depends="compile" description="Performs enhancement on compiled data classes.">
    <enhance_war war="war">
        <args>
            <arg value="-enhancerVersion" />
            <arg value="v2" />
        </args>
    </enhance_war>
</target>

версия является версией плагина GAE JDO/JPA. (Спасибо DataNucleus! :)

person De Cai    schedule 28.09.2012