作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想从 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>
现在我有两个问题:
<强>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) {
}
}
但问题是类路径似乎在 ant.weave(..)
中不起作用。编织过程在消息出现后中止:
Execution failed for task ':eclipseWeave'.
> java.lang.NoClassDefFoundError: some/class/from/my/dependencies
类路径设置适用于 ant.taskdef(..)
,因为在我的依赖项中找到了 StaticWeaveAntTask。我怎样才能让它应用于 ant.weave(..)
本身?
<强>2。我如何将它集成到我的构建中,以便它在每个 compileJava
步骤后自动执行?
最佳答案
我知道这是一个老问题,但根据 OP 对“渐变”方式的评论,我想我会分享我们的方法。我们正在使用 JavaExec 任务和各种可用的配置对象。
由于编织是在类目录中完成的(在构建 JAR 之前),您最终只需构建一个 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.compileClasspath
}
tasks.withType(Jar){
dependsOn "performJPAWeaving"
}
关于java - 如何从 Gradle 启用 Eclipselink 的静态编织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22997757/
我是一名优秀的程序员,十分优秀!