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

Can we use one wsimport task for multiple wsdl's in gradle without repeating the similar code?

我正在编写一个 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] 是一个对象,并且由于数组是字符串的一个实例,它可能有效但没有。任何帮助将帮助我消除代码重复将不胜感激。我也是 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 但您应该能够替换您当前的代码(适当地进行轻微的编辑)。