10

我正在使用 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>

pathelement 路径中的所有 jar 文件也作为库包含在 Netbeans IDE 中。当点击“Clean & Build”时,我现在收到以下错误:

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

我在这里做错了什么?

4

3 回答 3

5

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

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

于 2012-05-11T13:11:15.180 回答
4

我还使用 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>

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

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

${build.classes.dir}/META-INF/persistence.xml

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

现在如果我跑

ant weaving 

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

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

ant dist

无需编织,建筑物将正​​常。

当然,我的 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>
于 2014-11-14T06:31:33.203 回答
2

我还必须包含org.eclipse.persistence.jpa.jpql_1.0.1.jarorg.eclipse.persistence.jpa.modelgen.processor-2.3.2.jar才能使编织变得生动。希望这可以帮助。

于 2013-05-22T07:26:38.133 回答