如何从Gradle启用Eclipselink的静态编织

Mar*_* S. 3 java ant eclipselink gradle

我想从Gradle为我的JPA类启用Eclipselink的静态编织.Eclipselink文档解释了如何在Ant任务中执行此操作:

<target name="define.task" 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="define.task">
    <weave  source="c:\myjar.jar"
            target="c:\wovenmyjar.jar"
            persistenceinfo="c:\myjar-containing-persistenceinfo.jar">
        <classpath>
            <pathelement path="c:\myjar-dependent.jar"/>
        </classpath>

    </weave>
</target>
Run Code Online (Sandbox Code Playgroud)

现在我有两个问题:

1.我如何将其"翻译"为Gradle方法? 我试过这个(基于http://www.gradle.org/docs/current/userguide/ant.html#N1143F上的文档):

task eclipseWeave << {
    ant.taskdef(name: "weave",
                classname: "org.eclipse.persistence.tools.weaving.jpa.StaticWeaveAntTask",
                classpath: configurations.compile.asPath)

    ant.weave(source: relativePath(compileJava.destinationDir),
              target: relativePath(compileJava.destinationDir),
              persistenceinfo: relativePath(processResources.destinationDir) {
    }
}
Run Code Online (Sandbox Code Playgroud)

但问题是类路径似乎不起作用ant.weave(..).编织过程在消息输入后中止:

Execution failed for task ':eclipseWeave'.
> java.lang.NoClassDefFoundError: some/class/from/my/dependencies
Run Code Online (Sandbox Code Playgroud)

类路径设置适用ant.taskdef(..)于我的依赖项中的StaticWeaveAntTask.我怎样才能让它适用于ant.weave(..)自己?

2.如何将其集成到我的构建中,以便在每个compileJava步骤后自动执行?

Ter*_*nce 8

我知道这是一个老问题,但根据OP对"gradle"方式的评论,我认为我会分享我们的方法.我们正在使用JavaExec任务和各种可用的配置对象.

由于编织是在classes目录中完成的(在构建JAR之前),最终只需要构建一个jar而不是两个.由于我们的罐子很大,这对我们很重要.

task performJPAWeaving(type: JavaExec, dependsOn: "compileJava"){
  inputs.dir compileJava.destinationDir
  outputs.dir compileJava.destinationDir
  main "org.eclipse.persistence.tools.weaving.jpa.StaticWeave"
  args  "-persistenceinfo",
   "src/main/resources",
   compileJava.destinationDir.getAbsolutePath()
  classpath = configurations.compile
}

tasks.withType(Jar){
  dependsOn "performJPAWeaving"
}
Run Code Online (Sandbox Code Playgroud)