2013-08-09 3 views
2

У меня есть проект Maven, который использует метамодель JPA 2.0. Я настроил M2e на использование плагина maven-processor-plugin и build-helper-maven-plugin во время его жизненного цикла сборки. Результатом было то, что: классы метамодели JPA 2.0 были сгенерированы в целевых/сгенерированных источниках/аннотациях, и все они были скомпилированы успешно (я проверил сгенерированный .war-файл, все созданные классы были там). Тем не менее, Eclipse все еще сообщил об ошибках компиляции.
Мое окружение: обновление JDK 1.6 43 x64, Eclipse Juno SR2, M2e 1.4.0.
Моя конфигурация выглядит следующим образом:
Для сборки-хелперов-Maven-плагин (в <build><plugins>):Eclipse сообщает об ошибках компиляции в кодах с использованием сгенерированных классов

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
     <execution> 
      <id>add-source</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>add-source</goal> 
      </goals> 
      <configuration> 
       <sources> 
        <source>${project.build.directory}/generated-sources/annotations/</source> 
       </sources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Для Maven-процессор-плагин (в <build><plugins>):

<plugin> 
    <groupId>org.bsc.maven</groupId> 
    <artifactId>maven-processor-plugin</artifactId> 
    <version>2.2.4</version> 
    <executions> 
     <execution> 
      <id>process</id> 
      <goals> 
       <goal>process</goal> 
      </goals> 
      <phase>generate-sources</phase> 
      <configuration> 
       <outputDirectory>${project.build.directory}/generated-sources/annotations/</outputDirectory> 
       <processors> 
        <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor> 
       </processors> 
      </configuration> 
     </execution> 
    </executions> 
    <dependencies> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-jpamodelgen</artifactId> 
      <version>1.2.0.Final</version> 
     </dependency> 
    </dependencies> 
</plugin> 

Для maven-compiler-plugin (в <build><plugins>):

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
     <compilerArgument> 
      -proc:none 
     </compilerArgument 
    </configuration> 
</plugin> 

Для М2Э (в <build>):

<pluginManagement> 
    <plugins> 
     <plugin> 
      <groupId>org.eclipse.m2e</groupId> 
      <artifactId>lifecycle-mapping</artifactId> 
      <version>1.0.0</version> 
      <configuration> 
       <lifecycleMappingMetadata> 
        <pluginExecutions> 
         <pluginExecution> 
          <pluginExecutionFilter> 
           <groupId>org.codehaus.mojo</groupId> 
           <artifactId>build-helper-maven-plugin</artifactId> 
           <versionRange>1.8</versionRange> 
           <goals> 
            <goal>add-source</goal> 
           </goals> 
          </pluginExecutionFilter> 
          <action> 
           <execute/> 
          </action> 
         </pluginExecution> 
         <pluginExecution> 
          <pluginExecutionFilter> 
           <groupId>org.bsc.maven</groupId> 
           <artifactId>maven-processor-plugin</artifactId> 
           <versionRange>2.2.4</versionRange> 
           <goals> 
            <goal>process</goal> 
           </goals> 
          </pluginExecutionFilter> 
          <action> 
           <execute/> 
          </action> 
         </pluginExecution> 
        </pluginExecutions> 
       </lifecycleMappingMetadata> 
      </configuration> 
     </plugin> 
    </plugins> 
</pluginManagement> 

Сущности класс:

@Entity 
public class Widget implements Serializable { 
    // ... 
} 

Метамодели класс:

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor") 
@StaticMetamodel(Widget.class) 
public abstract class Widget_ { 
    // ... 
} 

класса, который использует сгенерированный класс метамодели:

public class WidgetService { 
    public void processWidgets() { 
     Class<Widget_> clazz = Widget_.class; // Compilation error here - Widget_ cannot be resolved to a variable 
    } 
} 

Я уже нажал правой кнопкой мыши> Maven> Обновить проект ...> Обновить конфигурацию проекта из pom.xml, но файл .classpath по-прежнему не содержит записи из папки сгенерированных источников.
Может ли кто-нибудь дать мне подсказку? Спасибо.

ответ

4

Не знаю, если вы решили проблему, но только в том случае:

я столкнулась с той же ситуацией, после повторной установки Eclipse IDE и поняла, что «Аннотация Processing» была отключена для проекта.

правой кнопкой мыши на проекте -> Свойства -> Java Compiler -> Аннотация Обработка

Проверить позволяют и указать сгенерированный исходный каталог.

Это сделало трюк для меня. Больше никаких жалоб от Eclipse и autoComplete на foo_.whatever работал снова.

+0

Приятный трюк, это помогло – Sam