2016-09-07 1 views
1

私はWebサービス成果物を生成するwsimportを行うgradleタスクを作成しています。私が書いた仕事は完璧に動作しており、以下に示されています。同様のコードを繰り返さずに、複数のwsdlを1つのwsimportタスクで使用することはできますか?

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を解析するために使用するソースコードです。私はすでにarguments[0]がオブジェクトであり、配列は文字列のインスタンスなので、wsdlの考え方の配列を渡してみましたが、うまくいきませんでしたが、それはできませんでした。コードの反復を排除するのに役立つ助けをいただければ幸いです。また、私は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 
    ] 

答えて

1

一つの方法は、リストを作成し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を使用していますが(必要に応じて、わずかな編集で)あなたの現在のコードに置き換えることができるはずです。

関連する問題