【发布时间】:2013-06-07 09:46:10
【问题描述】:
我是 gradle 的新手,并且有一个多项目 gradle 构建,希望向其中一个项目添加 WSDL2Java 相关任务。 我已经编写了生成、编译、将生成的存根打包到 jar 中并将其添加到类路径中的必要任务。 现在,我想在 java 编译开始之前执行这些任务。
以下是我如何编写新任务
task genClasses(type: JavaExec) {
//Run WSDL2Java and generate java source files.
}
task compileClasses(dependsOn:'genClasses'){
//Use ant.javac or add type:JavaCompile in task defination as shown below
// task compileClasses(dependsOn:'genClasses',type:JavaCompile)
}
task packageClasses(dependsOn:'compileClasses',type:Jar){
//package my jar
}
task createStubs(dependsOn: 'packageClasses'){
//add created jar to the classpath
}
compileJava.dependsOn createStubs
构建失败并出现异常并显示以下消息
Circular dependency between tasks. Cycle includes [task ':projectx:genWsdlClasses', task ':projectx:classes'].
我发现 compileClasses 任务以某种方式导致了这种循环依赖,但不知道如何摆脱它?
有没有其他更好的或惯用的方法来执行此源代码生成、生成的源代码的编译、打包并将其添加到主源代码集类路径中,然后再构建主源代码?
【问题讨论】:
-
为了匹配你的 gradle 文件,错误信息应该说“genClasses”吗?或者也许第一个任务实际上应该命名为 genWsdlClasses?我不是要吹毛求疵;我想确保我没有遗漏任何东西。
-
我将您的代码复制粘贴到一个 gradle 文件中,添加了 java 插件,删除了 JavaExec 类型,它运行得很好。诚然,它基本上什么也没做,但确实有效。
-
这里也一样。对我来说很好。你能发布完整的构建脚本吗?
标签: gradle wsdl2java build.gradle