Не удалось найти метод jaxws () для аргументов [com.sun.xml.ws:jaxws-tools:2.1.4] - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь сгенерировать Java-классы, используя следующий код, но это не помогает из-за некоторой проблемы с плагином gradle.

Я искал его и обнаружил, что есть много доступных плагинов для генерации Java, классифицированных из xsdно только несколько plugins для генерации формы кода wsdl.jaxb - один из них, который я подумал использовать.

Вот мой файл build.gradle:

configurations {
    jaxws
}
buildscript {
    ext {
        springBootVersion = "2.1.4.RELEASE"
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion"
        jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4'
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

repositories {
    mavenCentral()
} 

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-actuator'
    compile 'org.springframework.boot:spring-boot-starter-web'
    compile 'org.springframework.boot:spring-boot-starter-web-services'     
    compile 'org.apache.httpcomponents:httpclient'
    compile '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.abc.test",
                    xnocompile: "true",
                    wsdl: '${projectDir}/src/main/resources/wsdls/wsdl_1.0.0.wsdl') {
                xjcarg(value: "-XautoNameResolution")
            }
        }
    }
}

compileJava {
    dependsOn wsimport
    source wsimport.destDir
}
bootJar {
    baseName = 'API'
    version = '1.0'

}

Теперь вот ошибка, которую я получаю, когда пытаюсь построить проектиспользуя командную строку.

C:\DEV\workspace\API>gradlew clean build --stacktrace

FAILURE: Build failed with an exception.

* Where:
Build file 'C:\DEV\workspace\API\build.gradle' line: 14

* What went wrong:
A problem occurred evaluating root project 'API'.
> Could not find method jaxws() for arguments [com.sun.xml.ws:jaxws-tools:2.1.4] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. 

Принимая ссылку из этого кода;https://gist.github.com/ae6rt/8883335

1 Ответ

1 голос
/ 05 июля 2019
configurations {
    jaxws
}

buildscript {
    dependencies {
        jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4'
    }
}

Конфигурация jaxws не применима для зависимостей скрипта сборки. Во-первых, он находится за пределами конфигурации buildscript и поэтому не виден. Во-вторых, зависимости скрипта сборки допускают только конфигурацию classpath ( Внешние зависимости для скрипта сборки ). Удаление jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4' из скрипта сборки исправляет проблему

Не удалось найти метод jaxws () для аргументов [...]

Следующая проблема заключается в том, что вы определяете зависимость jax-ws как

compile 'com.sun.xml.ws:jaxws-tools:2.1.4'

и попробуйте ссылаться на него как

taskdef(name: 'wsimport',
        classname: 'com.sun.tools.ws.ant.WsImport',
        classpath: configurations.jaxws.asPath)
                                  ^^^^^

Конфигурация jaxws не имеет определенных зависимостей, поэтому путь пуст. Изменение рассматриваемой зависимости на

jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4'

может решить эту проблему для вас.


Обновление

Поскольку Gradle заменил File classesDir на FileCollection classesDirs, согласно вашему комментарию вы получаете ошибку

Нет подписи метода: org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection.mkdirs () применим к типам аргументов: () значения: [] Возможные решения: min (), tails (), first ( ), inits (), минус (org.gradle.api.file.FileCollection), мин (java.util.Comparator)

на линии

sourceSets.main.output.classesDirs.mkdirs()

Если у вас есть только 1 класс выходного каталога, можно использовать обходной путь

sourceSets.main.output.classesDirs.singleFile.mkdirs()

(из: FileCollection.getSingleFile () )

...