使用Eclipse WTP对EclipseLink进行静态编织

时间:2011-08-11 13:41:59

标签: jpa eclipselink compile-time-weaving

我在Eclipse WTP中的Tomcat上运行了一个项目,该项目与一些JPA实体一起部署。我想在这些实体上启用ChangeTracking,但这需要启用编织。由于Tomcat不允许动态编织,我需要使用静态编织来完成此操作。

这可能吗? Eclipse的Dali插件似乎没有任何静态编织工具。

1 个答案:

答案 0 :(得分:2)

是的,我很可能一直这样做。此外,我在Eclipse WTP中使用Jetty(J2EE预览版)它非常快,并且运行良好,但编织。创建一个ant可以像这样处理的weave.xml文件:

<?xml version="1.0"?>
<project name="MyProject" default="weaving" basedir=".">
  <property environment="env"/> 

    <path id="weavingclasspath"> 
      <fileset dir="${basedir}\\web\\WEB-INF\\lib">
        <include name="**/*.jar"/>
      </fileset>
        <fileset dir="${basedir}\\antlib">
        <include name="**/*.jar"/>
      </fileset>
      <pathelement location="classes"/>
      <dirset dir="${basedir}\\build">
        <include name="**/classes"/>
      </dirset>
    </path>


    <target name="define.task" description="New task definition for EclipseLink static weaving" > 
      <taskdef name="weave" classname="org.eclipse.persistence.tools.weaving.jpa.StaticWeaveAntTask">
        <classpath refid="weavingclasspath"/> 
        </taskdef>
    </target> 

    <target name="weaving" description="perform weaving" depends="define.task"> 
        <weave loglevel="WARNING" source="${basedir}\\build\\classes\\"  target="${basedir}\\build\\classes\\">
     <classpath refid="weavingclasspath"/> 
     </weave>
    </target> 

</project> 

将它放在项目根目录中,并将其作为Ant任务执行。确保在完成后刷新项目,因为您的实体的所有.class文件都将被编织。我实际上将此任务链接到eclipse构建过程,因此它是自动的。您可能需要修改项目的ant脚本中的某些文件路径才能使其正常工作,但您应该明白这一点。我的antlib里面有servlet.jar(我不记得为什么),我的WEB-INF / lib包含了我所有的web项目罐和eclipselink。