java - 我们可以在 gradle 中对多个 wsdl 使用一个 wsimport 任务,而不重复类似的代码吗?

标签 java gradle groovy build antbuilder

我正在编写一个 gradle 任务,它执行 wsimport 来生成 Web 服务工件。我编写的任务运行得很好,如下所示。

task wsimport {
    ext.destDir = file('gen')
    doLast {
        ant {
            sourceSets.main.output.classesDir.mkdirs()
            destDir.mkdirs()
            taskdef(name: 'wsimport',
                    classname: 'com.sun.tools.ws.ant.WsImport',
                    classpath: 'C:/Users/sbhattar/git/java_commons/common/java/lib/jaxws-2.2.6/jaxws-tools.jar'
            )
            wsimport(keep: true,
                    destdir: sourceSets.main.output.classesDir,
                    sourcedestdir: destDir,
                    extension: "true",
                    verbose: "false",
                    quiet: "false",
                    xnocompile: "true",
                 wsdl:"http://spapen2w1.shashwat.com.PlanService_4_0.wsdl") {
                xjcarg(value: "-XautoNameResolution")
            }
        }
    }
}

但是由于我需要从多个 wsdl 生成工件,所以我想在 wsdl 参数上传递诸如 WSDL 路径数组之类的内容。这是 ant.taskdef 用于解析 wsdl 的源代码。我已经尝试过传递 wsdl 数组的想法,因为 arguments[0] 是一个对象,并且由于 array 是字符串的实例,它可能可以工作,但没有。任何帮助我消除代码重复的帮助将不胜感激。而且我对 groovy/gradle 很陌生。

public void execute(AntBuilder ant, Object... arguments) {
    def wsdl = arguments[0]
    def extension = arguments[1]
    def destinationDir = arguments[2]
    def classpath = arguments[3]
    def episodes = arguments[4]

    log.info("parsing wsdl '{}' with destination directory of '{}'",
         wsdl, destinationDir)

    ant.taskdef (name : 'wsimport',
         classname: 'com.sun.tools.ws.ant.WsImport',
         classpath: classpath)

    def params = [
              wsdl            : wsdl.path,
              verbose         : extension.verbose,
              sourcedestdir   : destinationDir.path,
              keep            : extension.keep,
              wsdlLocation    : extension.wsdlLocation,
              xnocompile      : extension.xnocompile,
              fork            : extension.fork,
              xdebug          : extension.xdebug,
              target          : extension.target,
              xadditionalHeaders : extension.xadditionalHeaders
    ]

最佳答案

消除重复的一种方法是创建一个列表,wsdlPaths,并对其进行迭代。一个简单的例子:

task wsimport {
    doLast {
        def wsdlPaths = ["path1", "path2", "path3"]

        wsdlPaths.each { wsdlPath ->
            ant {
                // replace this with your current code as appropriate
                echo(message: "path is ${wsdlPath}")
            }
        }
    }
}

这里我们仅使用 ant.echo,但您应该能够替换当前的代码(适当进行轻微编辑)。

关于java - 我们可以在 gradle 中对多个 wsdl 使用一个 wsimport 任务,而不重复类似的代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39377004/

相关文章:

java - 使用 FIPS 140-2 库在 Java 中创建 OpenPGP 消息

java - 从多个字符生成排列

Android Studio : Change location of . gradle 目录

java - 如何在同一个 Android 项目的多个资源文件夹之间进行更改?

Linux - 命名管道 - 丢失数据

java - 有时会出现 while-true 循环循环

java - 如何在两个 JVM 实例之间共享内存?

android - 如何为我的 Android 应用程序定义辅助 ABI

maven - 如何在 SpringBoot 应用程序测试上下文中使用来自测试 application.yml 的 spring 数据源设置的参数实例化 groovy.sql.Sql?

mysql - Grails - 无法使用 Mysql 执行 SELECT WHERE