2013-03-21 1 views
2

Я пытаюсь включить прибор Hibernate для объектов в проекте Maven. Инструментарий работает нормально на объектах с только полями стандартных типов, определенных Java API (String, BigDecimal и т. Д.), Но когда задача инструментария пытается работать над классами, которые имеют поля типов, определенные другими классами в моем проекте, она не со следующей ошибкой:Сбой преобразователя аппаратуры Hibernate: не удается найти класс (HHH000373)

[instrument] processing class : com.test.entity.EntityWithCustomTypes; file = C:\Project\Project-ejb\target\classes\com\test\entity\EntityWithCustomTypes.class 
Mar 21, 2013 10:00:24 AM org.hibernate.bytecode.internal.javassist.JavassistClassTransformer doTransform 
ERROR: HHH000373: Unable to transform class: cannot find com.test.bo.CustomType 

Я пытался намеренно инструментированием класса CustomType (который не должен быть необходимым); инструментарий обрабатывает его, но он по-прежнему вызывает ошибки на EntityWithCustomTypes.

Вот плагин, который я использую в моем pom.xml; Проект был создан с использованием архетипа JBoss 7 Java EE, и я пытаюсь выполнить инструментовку в модуле EJB POM:

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
     <execution> 
      <configuration> 
       <tasks> 
        <taskdef name="instrument" classname="org.hibernate.tool.instrument.javassist.InstrumentTask"> 
         <classpath> 
          <path refid="maven.dependency.classpath" /> 
          <path refid="maven.compile.classpath" /> 
          <path refid="maven.runtime.classpath" /> 
          <path refid="maven.plugin.classpath" /> 
          <dirset dir="${project.build.outputDirectory}" /> 
         </classpath> 
        </taskdef> 
        <instrument verbose="false"> 
         <fileset dir="${project.build.outputDirectory}"> 
          <include name="**/entity/*.class" /> 
         </fileset> 
        </instrument> 
       </tasks> 
      </configuration> 
      <phase>package</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
    <dependencies> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.1.10.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>javassist</groupId> 
      <artifactId>javassist</artifactId> 
      <version>3.12.1.GA</version> 
     </dependency> 
    </dependencies> 
</plugin> 

я могу проверить, что фаза компиляции генерирует соответствующий класс (CustomType) , поэтому я не могу понять, почему JavassistClassTransformer Hibernate не может его найти.

ответ

1

Это похоже на javassist-3.15.0. Для нас более поздняя версия работала (3.17.1), но эта версия серьезно нарушает проксирование (https://hibernate.atlassian.net/browse/HHH-7884), поэтому команда Hibernate решила вернуться к 3.15.0.

Так что в конце концов у нас такая же проблема здесь ...

+0

Вы правы; Спасибо, что указал мне в сторону джавассиста. Я использовал еще более старую версию (3.12.1), так как я ошибочно нашел ** старый ** репозиторий Maven. Обновление до версии 3.17.1 устраняет ошибку сборки, но, как вы указали, она разбивает инструментарий; мои якобы лениво загруженные поля с нетерпением загружаются так же, как и раньше. Таким образом, цель побеждена. Я отмечаю, что javassist-3.16.0 все еще имеет какую-либо ошибку, вызвав ошибку сборки, так что ее нет. 3.17.0 компилируется, но я подозреваю, что он разбивает инструменты так же, как 3.17.1; проверит, хотя. – Sumitsu

+0

Подтвержденные версии 3.17.0 и 3.17.1 позволяют инструментальным средствам находить нужные им классы, но фактически не позволяют им работать. Все, что было до 3.17.0, приводит к сбою аппаратуры с ошибками, которые я описал. – Sumitsu

0

Мой текущий подход заключается в использовании Javassist 3.17.1 для приборов и развертывания Javassist 3.15.0 в файле приложения войны. Надеюсь, что это работает удобно ...

UPDATE: кажется, работает до сих пор, но это действительно некрасиво обходной путь ...

1

Последние Hibernate 4.2.7 SP1 использует Javassist 3.18.0, который, наконец, решает обсуждаемый вопрос ,