繁体   English   中英

我们可以在不重复类似代码的情况下将一个wsimport任务用于多个wdl中吗?

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

我正在编写一个不执行wimport的gradle任务来生成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但您应该能够替换当前代码(适当地稍作修改)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM