Как улучшить OpenJPA с помощью Ant + IntelliJ IDEA

Это сводит меня с ума, и я шокирован тем, что официальная документация абсолютно бесполезна.

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

  • IntelliJ ИДЕЯ 11
  • OpenJPA 2.1.1

Поскольку openjpa добавлен в список используемых библиотек, у меня уже был classpath для 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:\work\prj\build.xml:283: org.apache.openjpa.util.MetaDataException: не удалось настроить MetaDataFactory (conf.newMetaDataFactoryInstance() вернул null). Это может означать, что свойства конфигурации не найдены. Убедитесь, что у вас есть файл META-INF/persistence.xml, что он доступен в вашем пути к классам или доступен файл свойств, который вы используете для конфигурации. Если вы используете Ant, см. атрибуты или вложенного элемента задачи. Это также может произойти, если ваши jar-файлы дистрибутива OpenJPA повреждены или если ваша политика безопасности слишком строгая.

Я протестировал Process Monitor и вижу, что он открывается и читается< /сильный> persistence.xml.

Кто-то сообщил об ошибке, у меня возникли проблемы, и он получил ответ, что нашел persistence.xml не является источником проблемы.

Вопросы:

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

person expert    schedule 20.12.2011    source источник
comment
Вы проверили, что каталог META-INF находится в вашем пути к классам?   -  person Rick    schedule 20.12.2011
comment
Я не знаю, как указать дополнительный каталог пути к классам в сценарии Ant. Но на всякий случай я скопировал persistence.xml в каталог, где находится jar OpenJPA.   -  person expert    schedule 20.12.2011


Ответы (2)


Поэтому я не мог заставить его работать без недокументированного 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>
person Community    schedule 24.12.2011

Похоже, вы могли пропустить важную часть документации. В вашем 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>
person Rick    schedule 20.12.2011
comment
Нет, когда он не может найти мои объекты, он выдает для них исключение ClassNotFound. Мне удалось заставить его работать через командную строку и через Ant. Четыре часа моей жизни мне уже не вернуть. - person expert; 21.12.2011
comment
Если вы поместите META-INF/persistence.xml в корзину, это должно сработать. - person Rick; 21.12.2011
comment
Не повезло :( Хотя я вижу, что java.exe процесс обращается к persistence.xml. Мне удалось заставить его работать как этим. Но Я недоволен тем, что указываю абсолютный путь к .xml в атрибуте propertiesFile. Не могли бы вы сказать мне, как я могу заставить его работать, указав только имя файла и определив дополнительный путь к классу в другом месте? Я попробовал пару вариантов, но это не сработало :( Спасибо! - person expert; 21.12.2011