2013-06-11 95 views
1

我failry新摇篮,并有一个多gradle这个构建到要添加WSDL2Java的相关任务的项目之一。 我已经编写必要的任务生成,编译,打包生成的存根成一个jar并将其添加到类路径中。 现在,我想在java编译开始之前执行这些任务。摇篮:从WSDL和XSD源并将其添加到主类路径编译

下面是我如何编码的新任务

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任务在某种程度上是造成这种循环依赖,但不知道如何摆脱它?

是否有其他更好的或惯用的方式来执行这个源代码的生成,生成的来源,包装编译和之前的主要来源得到建立其添加到主sourceset类路径?

+0

如果该错误消息说,为了配合你的gradle这个文件“genClasses”?或者,也许第一个任务实际上应该被命名为genWsdlClasses?我并不想挑剔;我想确保我不会错过任何东西。 –

+2

我复制粘贴你的代码放到一个文件的Gradle,增加了Java插件,去掉了JavaExec类型和它运行得很好。当然,它基本上什么都没做,但它工作。 –

+0

同样在这里。对我来说工作得很好。你可以请发布完整的构建脚本? –

回答

1

我使用JAXB的插件可用here。我的Gradle构建文件如下所示:

buildscript { 
    repositories { 
    mavenCentral() 
    } 
    dependencies { 
    classpath 'no.entitas.gradle.jaxb:gradle-jaxb-plugin:2.0' 
    } 
} 

dependencies { 
    jaxb 'com.sun.xml.bind:jaxb-xjc:2.2.5-1' 
    jaxb 'com.sun.xml.bind:jaxb-impl:2.2.5-1' 
} 

generateSchemaSource.destinationPackage = "my.custom.package" 

我相信这会创建您想要的jaxb类。这有帮助吗?