如何在Netbeans中使用Eclipse-Link JPA应用静态编织Ant任务?

sal*_*inx 10 java static entity jpa eclipselink

我使用的是Netbeans 7.1.1和Glassfish 3.1.2服务器.作为JPA提供商,我决定使用随Netbeans一起提供的eclipse-link 2.3.0.因为我想使用延迟提取,而我的项目由大约45个JPA实体类组成,它们之间有很多关系,所以我决定使用静态编织.此外,@ Entity类位于单独的Class Lib项目中,而persistence.xml位于EJB项目中.

我已按照此处的说明操作:http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Performance/Weaving/Static_Weaving

我将ant-task放入build-impl.xml文件中(如下).使用Netbeans时这是正确的吗?这是build-impl.xml的片段:

<target name="-post-jar" description="New task definition for EclipseLink static weaving">
    <taskdef name="weave" classname="org.eclipse.persistence.tools.weaving.jpa.StaticWeaveAntTask"/>
</target>
<target name="weaving" description="perform weaving" depends="-post-jar">
    <weave  source="${dist.jar}\MyProject.jar"
            target="${dist.jar}\MyProject_Weaved.jar"
            persistenceinfo="${dist.jar}..\..\MyProjectEE\MyProject-ejb\build\classes\META-INF\persistence.xml"
            loglevel="FINER">
        <classpath>
            <pathelement path="${dist.jar}\lib\eclipselink-2.3.0.jar"/>
            <pathelement path="${dist.jar}\lib\javaee-api-6.0.jar"/>
            <pathelement path="${dist.jar}\lib\jasypt-1.9.0.jar"/>
            <pathelement path="${dist.jar}\lib\javax.persistence-2.0.jar"/>
            <pathelement path="${dist.jar}\lib\org.eclipse.persistence.jpa.jpql_1.0.0.jar"/>
            <pathelement path="${dist.jar}\lib\joda-time-2.1.jar"/>
            <pathelement path="${dist.jar}\lib\jms.jar"/>
        </classpath>
    </weave>
</target>
Run Code Online (Sandbox Code Playgroud)

pathelement路径中的所有jar文件也作为库包含在Netbeans IDE中.点击"清理和构建"时,我现在收到以下错误:

D:\workspace\MyProject\nbproject\build-impl.xml:703: taskdef class org.eclipse.persistence.tools.weaving.jpa.StaticWeaveAntTask cannot be found
using the classloader AntClassLoader[]
Run Code Online (Sandbox Code Playgroud)

我在这里弄错了什么?

Pet*_*zki 5

您需要将 eclipselink.jar 和 javax.persistence.jar 添加到 Ant 类路径。

在 Netbeans 中,转到 Tools/Options/Miscellaneous/Ant,并在那里编辑类路径。


Mik*_*van 5

我还使用 Netbeans 8.0.1 在 TomEE 1.7.0 中使用 Eclipselink 2.4.2 开发 java ee 项目,我只是将以下内容放入我的build.xml中(我从不修改 build-impl.xml,因为 Netbeans 可以在某些情况下覆盖它)在配置、构建中修改):

<target name="--weaving-def" description="New task definition for EclipseLink static weaving" depends="dist">
    <taskdef name="weave" classname="org.eclipse.persistence.tools.weaving.jpa.StaticWeaveAntTask"
             classpath="${j2ee.platform.classpath}">
    </taskdef>
</target>
<target name="weaving" description="perform weaving" depends="--weaving-def">
    <weave source="${build.classes.dir}"
           target="${build.classes.dir}"
           loglevel="INFO">
        <classpath path="${j2ee.platform.classpath}:${javac.classpath}"/>  
    </weave>
</target>
Run Code Online (Sandbox Code Playgroud)

您可以看到我只使用了所有 Netbeans Java EE Ant 项目中常用的变量。我没有直接定义任何jar,只是已经在项目中定义的变量。

在我的实现中,我使用分解的目录结构,我的 persistence.xml 位于

${build.classes.dir}/META-INF/persistence.xml
Run Code Online (Sandbox Code Playgroud)

最重要的是正确定义类路径

现在如果我跑

ant weaving 
Run Code Online (Sandbox Code Playgroud)

静态编织就完成了。构建需要大约 15 秒的时间,因此我仅在测试服务器和生产服务器上而不是在我的开发环境中以这种方式构建。

如果我只是简单地运行(或使用 Netbeans 构建菜单)

ant dist
Run Code Online (Sandbox Code Playgroud)

不编织时,建筑物将呈现正常状态。

当然,我的 persistence.xml 中有一个编织定义,如下所示:

<persistence-unit name="MY-PU" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>mydata</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
        <property name="eclipselink.logging.logger" value="org.eclipse.persistence.logging.DefaultSessionLog"/>
        <property name="eclipselink.logging.level" value="INFO"/>
        <property name="eclipselink.weaving" value="static"/>
    </properties>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)