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

Gradle:从WSDL生成源&;XSD并将其添加到主类路径进行编译,gradle,wsdl2java,build.gradle,Gradle,Wsdl2java,Build.gradle,我是gradle的新手,有一个多项目gradle构建,希望在其中一个项目中添加与WSDL2Java相关的任务。 我已经编写了必要的任务来生成、编译、将生成的存根打包到jar中并将其添加到类路径中。 现在,我想在java编译开始之前执行这些任务 下面是我如何编写新任务的代码 task genClasses(type: JavaExec) { //Run WSDL2Java and generate java source files. } task compileClasses(dependsO

我是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任务以某种方式导致了这种循环依赖,但不确定如何消除它


在主源代码生成之前,是否有其他更好或惯用的方法来执行此源代码生成、编译生成的源代码、打包并将其添加到主源代码集类路径?

我使用可用的Jaxb插件。我的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类。这有帮助吗?

我使用可用的Jaxb插件。我的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类。这有帮助吗?

使用插件“no.nils.wsdl2java”

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

使用插件“no.nils.wsdl2java”


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

为了匹配gradle文件,错误消息是否应该显示“genClasses”?或者第一个任务实际上应该命名为genWsdlClasses?我不是想挑剔;我想确保我没有遗漏什么。我将你的代码复制粘贴到一个gradle文件中,添加了java插件,删除了JavaExec类型,它运行得很好。诚然,它基本上什么也没做,但它起作用了。这里也一样。对我来说很好。你能发布完整的构建脚本吗?为了匹配你的gradle文件,错误消息应该是“genClasses”吗?或者第一个任务实际上应该命名为genWsdlClasses?我不是想挑剔;我想确保我没有遗漏什么。我将你的代码复制粘贴到一个gradle文件中,添加了java插件,删除了JavaExec类型,它运行得很好。诚然,它基本上什么也没做,但它起作用了。这里也一样。对我来说很好。你能发布完整的构建脚本吗?