【发布时间】:2011-10-25 00:13:33
【问题描述】:
我有一个项目在 Eclipse WTP 中的 Tomcat 上运行,该项目部署了一些 JPA 实体。我想在这些实体上启用 ChangeTracking,但这需要启用编织。由于 Tomcat 不允许动态编织,所以我需要使用静态编织。
这可能吗? Eclipse 的 Dali 插件似乎没有任何静态编织功能。
【问题讨论】:
标签: jpa eclipselink compile-time-weaving
我有一个项目在 Eclipse WTP 中的 Tomcat 上运行,该项目部署了一些 JPA 实体。我想在这些实体上启用 ChangeTracking,但这需要启用编织。由于 Tomcat 不允许动态编织,所以我需要使用静态编织。
这可能吗? Eclipse 的 Dali 插件似乎没有任何静态编织功能。
【问题讨论】:
标签: jpa eclipselink compile-time-weaving
是的,很可能我一直都这样做。此外,我在 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 项目 jar 以及 eclipselink。
【讨论】: