2011-12-20 3 views
6

Это сводит меня с ума, и я в шоке от того, что official documentation - это абсолютно useles.Как улучшить OpenJPA с Ant + IntelliJ IDEA

Вот что у меня есть:

  • IntelliJ IDEA 11
  • OpenJPA 2.1.1

С OpenJPA добавлена ​​в список используемых библиотек я уже путь к классам OpenJPA, который выглядит как это

<path id="library.openjpa.classpath"> 
    <fileset dir="${basedir}/lib/openjpa"> 
     <patternset refid="library.patterns"/> 
    </fileset> 
</path> 

Согласно официальной документации, я добавил следующую цель

<target name="enhance"> 
    <copy includeemptydirs="false" todir="${basedir}/lib/openjpa"> 
     <fileset dir="src" excludes="**/*.launch, **/*.java"/> 
    </copy> 

    <taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask"> 
     <classpath refid="library.openjpa.classpath"/> 
    </taskdef> 

    <openjpac> 
     <classpath refid="library.openjpa.classpath"/> 
    </openjpac> 
</target> 

Это дает мне исключение,

C: \ работа \ PRJ \ build.xml: 283: org.apache.openjpa.util.MetaDataException: MetaDataFactory не может быть сконфигурирован (конф. newMetaDataFactoryInstance() возвращено null). Это может означать , что свойства конфигурации не найдены. Убедитесь, что у вас есть файл META-INF/persistence.xml, который доступен в вашем пути к классам, или что файл свойств, который вы используете для конфигурации, - . Если вы используете Ant, см. Атрибуты вложенного элемента задачи или . Это также может произойти, если ваши банки распространения OpenJPA повреждены, или , если ваша политика безопасности слишком строгая.

я тестировал с Process Monitor и можно увидеть, что он открывает и читаетpersistence.xml.

У кого-то filed bug есть проблемы у меня есть, и ответ, который он получил, заключается в том, что поиск persistence.xml не является источником проблем.

Вопросов:

  1. Что я могу сделать, чтобы заставить его работать?
  2. Могу ли я заставить его работать, пропуская необходимость в persistence.xml и просто указывая шаблон для .class файлов Я хочу улучшить?
  3. Это больше вопрос Ant. Как я могу заставить OpenJPA enhancer искать persistence.xml в каталоге, отличном от openjpa-2.1.1.jar?
+0

Вы подтвердили, что каталог META-INF находится на вашем пути к классу? – Rick

+0

Я не знаю, как указать дополнительную директорию pathpath в скрипте Ant. Но просто чтобы убедиться, что я скопировал 'persistence.xml' в каталог, где сидит баннер OpenJPA. – expert

ответ

8

Так что я не мог заставить его работать без недокументированных propertiesFile. Вот версия, которая работает для меня. Кроме того, указание единицы постоянства через # приводит к сбою с NullReferenceException.

<target name="enhance"> 
    <taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask"> 
     <classpath refid="library.openjpa.classpath"/> 
    </taskdef> 

    <openjpac> 
     <classpath refid="library.openjpa.classpath"/> 
     <classpath location="${reporting.output.dir}"/> 
     <config propertiesFile = "${basedir}/src/META-INF/persistence.xml"/> 
    </openjpac> 
</target> 
0

Похоже, что вы, возможно, пропустили важную часть документации. В вашем library.openjpa.classpath отсутствует ссылка на ваши объекты и расположение файла persistence.xml. Попробуйте добавить это и посмотреть, как это происходит.

<path id="jpa.enhancement.classpath"> 
    <pathelement location="bin"/> <!-- add something like this --> 

    <!-- lib contains all of the jars that came with the OpenJPA binary download --> 
    <fileset dir="lib"> 
    <include name="**/*.jar"/> 
    </fileset> 
</path> 
+0

Nah, когда он не может найти мои объекты, он дает исключение ClassNotFound на них. Мне удалось заставить его работать через командную строку и через Ant. Четыре часа моей жизни я никогда не вернусь. – expert

+0

Если вы поместите META-INF/persistence.xml в корзину, он должен сработать. – Rick

+1

Не повезло :(Хотя я вижу, что процесс 'java.exe' обращается к' persistence.xml'. Мне удалось заставить его работать как [this] (http://pastebin.com/9bxWYQR3). Но я недоволен что я указываю абсолютный путь к .xml в атрибуте 'propertiesFile'. Не могли бы вы рассказать мне, как я могу заставить его работать, указав только имя файла и определяя дополнительный путь класса в другом месте? Я пробовал пару вариантов, но он не работал :(Благодаря! – expert

Смежные вопросы