2012-08-15 80 views
2

我们当前的项目是将Spring 3/OpenJPA与Roo和Maven集成到STS(Eclipse)中。 M2E插件有点问题,因为它无法处理实体增强。Maven Eclipse插件和openjpa增强的问题

因此,从程序方面,它是一个有点笨拙,我们不能一个键建立在Eclipse的下Maven的整个项目,但必须让STS(Eclipse)build项目,然后再运行Ant脚本enhance实体,然后refresh该项目,然后refreshserver deployment。不是很有效。

我想这是一段时间的问题,所以创建此线程以查看是否有任何更新。

似乎有一个工具可用(OpenJPA Eclipse Tooling Builder)但似乎不支持最新的Eclipse(STS 2.9.1基于Eclipse 3.7,该工具只覆盖3.4)。

所以问题变成:有什么办法可以将所有东西(build,compile with enhancement)整合在一起(可能只在Maven中设计POM)?

乐于学习任何建议。谢谢。

+0

您是否找到一个好的解决方案?每次我更改一个实体时,它都不会在IDE进行的构建过程中自动增强;我必须手动调用Maven来执行此操作。 – 2014-09-23 17:41:41

+0

@Caffé我没有。所以我使用Ant脚本来完成这个工作,所以我可以从UI中调用它。它看起来Maven Eclipse插件仍然不满意OpenJPA .. :( – Dreamer 2014-09-23 18:16:04

回答

0

@Subarule我没有使用Maven,但只有ANT用于我的项目,以下ANT脚本有助于增强我的构建。

<target name="enhance" depends="compile"> 
    <echo message="Enhancing...."/> 
    <!-- ***************************************************************************************************************** --> 
    <!-- DO NOT DELETE FOLLOWING CODE. THIS IS ADDED FOR ENCHANCING THE CLASSES AT COMPILE TIME. IT IS REQUIRED BY OPENJPA --> 
    <!-- Define the classpath to include the necessary files. --> 
    <!-- ex. openjpa jars, persistence.xml, orm.xml, and target classes --> 
    <path id="jpa.enhancement.classpath"> 
     <!-- Assuming persistence.xml/orm.xml are in META-INF --> 
     <pathelement location="META-INF" /> 

     <!-- Location of the .class files --> 
     <pathelement location="${build.classes}" /> 

     <!-- Add the openjpa jars --> 
     <fileset dir="OpenJPA_lib_jar"> 
       <include name="*.jar" /> 
     </fileset> 
    </path> 
    <!-- This is a bit of a hack, but I needed to copy the persistence.xml file from my src dir 
     to the build dir when we run enhancement --> 
    <!--<copy includeemptydirs="false" todir="bin"> 
     <fileset dir="src" excludes="**/*.launch, **/*.java"/> 
    </copy>--> 

    <!-- define the openjpac task; this can be done at the top of the --> 
    <!-- build.xml file, so it will be available for all targets --> 
    <taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask" classpathref="jpa.enhancement.classpath" /> 

    <!-- invoke enhancer on all .class files below the model directory --> 
    <openjpac> 
     <classpath refid="jpa.enhancement.classpath" /> 
     <fileset dir="."> 
      <include name="**/model/*.class" /> 
     </fileset> 
     <config propertiesFile = "${basedir}/src/META-INF/persistence.xml"/> 
    </openjpac> 
    <echo message="Enhancement complete" /> 
    <!-- ***************************************************************************************************************** --> 
</target> 

希望这可以帮助你。

+0

谢谢你的回应。其实我通过Ant运行增强,但我真的希望找到一个解决方案,使所有事情都由Maven/Pom发生。 – Dreamer 2012-08-16 20:52:31

1

我在eclipse kepler和OpenJPA 2.2.1中遇到了同样的问题。

该解决方案非常简单,但有点肮脏。

首先,您需要从该网站上安装OpenJPA的M2E连接器:

http://openjpa-maven-connector.googlecode.com/svn/trunk/openjpa-connector-update-site

接下来,您必须修改POM,并把旁边的OpenJPA的,Maven的插件的ELEMENTO插件(build元素内),下一个定义:

<pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.eclipse.m2e</groupId> 
       <artifactId>lifecycle-mapping</artifactId> 
       <version>1.0.0</version> 
       <configuration> 
        <lifecycleMappingMetadata> 
         <pluginExecutions> 
          <pluginExecution> 
           <pluginExecutionFilter> 
            <groupId>openjpa-maven-plugin</groupId> 
            <artifactId>openjpa-maven-plugin</artifactId> 
            <versionRange>[1.0,)</versionRange> 
            <goals> 
             <goal>enhance</goal> 
            </goals> 
           </pluginExecutionFilter> 
           <action> 
            <execute /> 
           </action> 
          </pluginExecution> 
         </pluginExecutions> 
        </lifecycleMappingMetadata> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 

所以构建元素应该看起来像这样(用自己的实体包):

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <verbose>true</verbose> 
       <compilerVersion>1.6</compilerVersion> 
       <source>1.6</source> 
       <target>1.6</target> 
       <debug>true</debug> 
       <debuglevel>lines,vars,source</debuglevel> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.openjpa</groupId> 
      <artifactId>openjpa-maven-plugin</artifactId> 
      <version>2.2.1</version> 
      <executions> 
       <execution> 
        <id>mappingtool</id> 
        <phase>process-classes</phase> 
        <goals> 
         <goal>enhance</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <includes> 
        com/xxxx/xxxx/* 
       </includes> 
      </configuration> 
     </plugin> 
    </plugins> 

    <pluginManagement> 
     <plugins> 
      <!--This plugin definition only affects eclipse, not the mvn command execution --> 
      <plugin> 
       <groupId>org.eclipse.m2e</groupId> 
       <artifactId>lifecycle-mapping</artifactId> 
       <version>1.0.0</version> 
       <configuration> 
        <lifecycleMappingMetadata> 
         <pluginExecutions> 
          <pluginExecution> 
           <pluginExecutionFilter> 
            <groupId>openjpa-maven-plugin</groupId> 
            <artifactId>openjpa-maven-plugin</artifactId> 
            <versionRange>[1.0,)</versionRange> 
            <goals> 
             <goal>enhance</goal> 
            </goals> 
           </pluginExecutionFilter> 
           <action> 
            <execute /> 
           </action> 
          </pluginExecution> 
         </pluginExecutions> 
        </lifecycleMappingMetadata> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build>