Gradle:从WSDL生成源代码XSD并将其添加到主类路径以进行编译

时间:2013-06-11 13:52:24

标签: gradle wsdl2java build.gradle

我没有新的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任务以某种方式导致了这种循环依赖,但不确定如何摆脱它?

在构建主源之前,还有其他更好或惯用的方法来执行此源生成,生成源的编译,打包并将其添加到主源集类路径中吗?

2 个答案:

答案 0 :(得分:1)

我使用Jaxb-Plugin here。 My 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类。这有帮助吗?

答案 1 :(得分:0)

使用插件“no.nils.wsdl2java”

https://plugins.gradle.org/plugin/no.nils.wsdl2java

该插件负责将其挂钩到构建和清理任务中。