1

我是 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 任务以某种方式导致了这种循环依赖,但不知道如何摆脱它?

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

4

2 回答 2

1

我使用这里提供的 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 类。这有帮助吗?

于 2013-06-25T19:27:42.340 回答
0

使用插件“no.nils.wsdl2java”

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

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

于 2015-04-22T05:52:43.597 回答