градиент wsimport

Я запускаю wsimport из своей командной строки для создания классов Java из WSDL, как показано ниже.

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 из-за ограничений компании. Как лучше всего это сделать?


person jana    schedule 12.04.2018    source источник


Ответы (2)


Как упоминает @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
}
person Marco Capo    schedule 01.03.2019

Найдено в Интернете. github.io/metro-jax-ws/doc/user-guide/ch04.html#using-wsimport-task" rel="nofollow noreferrer">сайт проекта метро

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
}
person lunicon    schedule 29.11.2018
comment
Существует более чистый вариант без муравья, просто вызовите класс WsImport напрямую как задачу gradle java, см. мой ответ на аналогичный вопрос: stackoverflow.com/a /61090230/6451286 - person pufface; 08.04.2020