找不到参数 [com.sun.xml.ws:jaxws-tools:2.1.4] 的方法 jaxws()
Could not find method jaxws() for arguments [com.sun.xml.ws:jaxws-tools:2.1.4]
我正在尝试使用以下代码生成 java 类,但它因某些 gradle
插件问题而失败。
我搜索了一下,发现有很多插件可以生成xsd
类的java,但是只有少数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.
configurations {
jaxws
}
buildscript {
dependencies {
jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4'
}
}
配置jaxws
不适用于构建脚本依赖项。首先,它位于 buildscript
配置之外,因此不可见。其次,构建脚本依赖项仅允许 classpath
配置 (External dependencies for the build script)。从构建脚本依赖项中删除 jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4'
修复了问题
Could not find method jaxws() for arguments [...]
下一个问题是您将 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
,根据您的评论,您现在收到错误消息
No signature of method: org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection.mkdirs() is applicable for argument types: () values: [] Possible solutions: min(), tails(), first(), inits(), minus(org.gradle.api.file.FileCollection), min(java.util.Comparator)
在线
sourceSets.main.output.classesDirs.mkdirs()
如果您只有 1 个 类 输出目录,解决方法是使用
sourceSets.main.output.classesDirs.singleFile.mkdirs()
我正在尝试使用以下代码生成 java 类,但它因某些 gradle
插件问题而失败。
我搜索了一下,发现有很多插件可以生成xsd
类的java,但是只有少数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.
configurations {
jaxws
}
buildscript {
dependencies {
jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4'
}
}
配置jaxws
不适用于构建脚本依赖项。首先,它位于 buildscript
配置之外,因此不可见。其次,构建脚本依赖项仅允许 classpath
配置 (External dependencies for the build script)。从构建脚本依赖项中删除 jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4'
修复了问题
Could not find method jaxws() for arguments [...]
下一个问题是您将 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
,根据您的评论,您现在收到错误消息
No signature of method: org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection.mkdirs() is applicable for argument types: () values: [] Possible solutions: min(), tails(), first(), inits(), minus(org.gradle.api.file.FileCollection), min(java.util.Comparator)
在线
sourceSets.main.output.classesDirs.mkdirs()
如果您只有 1 个 类 输出目录,解决方法是使用
sourceSets.main.output.classesDirs.singleFile.mkdirs()