【问题标题】:Gradle : Generating sources from WSDL & XSD and adding it to main classpath for compilationGradle:从 WSDL 和 XSD 生成源代码并将其添加到主类路径以进行编译
【发布时间】: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


【解决方案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 类。这有帮助吗?

【讨论】:

    【解决方案2】:

    使用插件“no.nils.wsdl2java”

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

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

    【讨论】:

      猜你喜欢
      • 2020-07-27
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 2015-04-05
      • 2019-10-10
      • 2017-05-22
      相关资源
      最近更新 更多