2016-09-07 6 views
1

웹 서비스 아티팩트를 생성하기 위해 wsimport를 수행하는 gradle 작업을 작성 중입니다. 내가 쓴 작업은 완벽하게 작동하고 아래에 나와 있습니다. 나는 여러 WSDL 년대에서 아티팩트를 생성해야하기 때문에비슷한 코드를 반복하지 않고도 여러 WSDL에 대해 하나의 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 경로의 배열 같은 것을 통과하고 싶습니다. 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 사용하지만 당신은 (적절한 약간의 편집으로) 현재의 코드를 대체 할 수 있어야한다.