【问题标题】:gradle wsimportgradle wsimport
【发布时间】:2018-04-12 11:31:26
【问题描述】:

我正在从命令行运行 wsimport 以从 WSDL 生成 java 类,如下所示。

wsimport -J-Djavax.xml.accessExternalDTD=all 
         -J-D-Djavax.xml.accessExternalSchema=all 
         -b http://www.w3.org/2001/XMLSchema.xsd 
         -b customization.xjb 
         -s genSrc https://example.com/XYZ.asmx?wsdl

我想创建等效的 gradle 任务。 由于公司限制,我不应该使用任何随机的自定义 gradle 插件。 最好的方法是什么?

【问题讨论】:

    标签: gradle wsimport


    【解决方案1】:

    正如@lunicon 提到的,你应该使用一个 ant 任务,这里有一些改进,因为 gradle 改变了几个属性。

    configurations {
        jaxws
    }
    
    dependencies {
        jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4'
    }
    
    task wsimport {
        ext.destDir = file("${projectDir}/src/main/generated")
        doLast {
            ant {
                sourceSets.main.output.classesDirs.inits()
                destDir.mkdirs()
                taskdef(name: 'wsimport',
                        classname: 'com.sun.tools.ws.ant.WsImport',
                        classpath: configurations.jaxws.asPath
                )
                wsimport(keep: true,
                        sourcedestdir: 'src/main/java',
                        package: "com.example.client.api",
                        wsdl: 'src/main/resources/api.wsdl') {
                    xjcarg(value: "-XautoNameResolution")
                }
            }
        }
    }
    
    compileJava {
        dependsOn wsimport
        source wsimport.destDir
    }
    

    【讨论】:

      【解决方案2】:

      在网上找到use ant task metro project site的更多细节

      configurations {
          jaxws
      }
      
      dependencies {
          jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4'
      }
      
      task wsimport {
          ext.destDir = file("${projectDir}/src/main/generated")
          doLast {
              ant {
                  sourceSets.main.output.classesDir.mkdirs()
                  destDir.mkdirs()
                  taskdef(name: 'wsimport',
                          classname: 'com.sun.tools.ws.ant.WsImport',
                          classpath: configurations.jaxws.asPath
                  )
                  wsimport(keep: true,
                          destdir: sourceSets.main.output.classesDir,
                          sourcedestdir: destDir,
                          extension: "true",
                          verbose: "false",
                          quiet: "false",
                          package: "com.example.client.api",
                          xnocompile: "true",
                          wsdl: 'src/main/resources/api.wsdl') {
                      xjcarg(value: "-XautoNameResolution")
                  }
              }
          }
      }
      
      compileJava {
          dependsOn wsimport
          source wsimport.destDir
      }
      

      【讨论】:

      【解决方案3】:
      configurations {
          jaxws
      }
      
      dependencies {
          jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4'
      }
      
      task wsimport {
          ext.destDir = file("${projectDir}/src/main/generated")
          doLast {
              ant {
                  destDir.mkdirs()
                  taskdef(name: 'wsimport',
                          classname: 'com.sun.tools.ws.ant.WsImport',
                          classpath: configurations.jaxws.asPath
                  )
                  wsimport(keep: true,
                          destdir: sourceSets.main.output.classesDir,
                          sourcedestdir: destDir,
                          extension: "true",
                          verbose: "false",
                          quiet: "false",
                          package: "com.example.client.api",
                          xnocompile: "true",
                          wsdl: 'c:/projects/gluecode/src/main/resources/api.wsdl') {
                      xjcarg(value: "-XautoNameResolution")
                  }
              }
          }
      }
      

      此示例复制自该问题的另一个答案,但删除了一行作为“sourceSets.main.output.classesDir.mkdirs()”并添加了.wsdl 的绝对路径

      要运行任务表单 gradle,请按照以下过程。

      1. 转到运行配置并创建新配置。
      2. 从配置中从列表中选择 Gradle Project 或 Gradle Task
      1. 任务名称应与 .gradle 文件中提供的任务 > {} 相同。
      2. 从运行配置运行任务,然后检查控制台日志。在控制台中记录一些从 gradle 存储库下载的依赖项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-18
        • 2013-01-15
        • 1970-01-01
        相关资源
        最近更新 更多