我尝试使用新版本的 com.intershop.gradle.jaxb:6.0.0 和 gradle:8.1.1 从 wsdl 生成 java 类。但我需要 jaxb2-basics 扩展才能使用“-XtoString”参数。当我添加
jaxbext 'org.jvnet.jaxb2_commons:jaxb2-basics:1.11.1'
到我的依赖项部分并尝试生成,即使没有“-XtoString”参数我也遇到了错误:
* What went wrong:
Execution failed for task ':jaxbJavaGenCsClientWs'.
> xjc failed
* Try:
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':jaxbJavaGenCsClientWs'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:149)
at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:147)
这是我的 gradle 项目的完整配置。我用的是java17。
plugins {
id "java"
id 'com.intershop.gradle.jaxb' version '6.0.0'
}
sourceSets {
main {
java {
srcDir "${project.buildDir}/generated-java/csClientWs"
}
}
}
repositories {
mavenCentral()
}
ext {
testV = '4.7.472.60'
}
dependencies {
implementation 'com.sun.xml.bind:jaxb-xjc:4.0.2'
implementation 'com.sun.xml.bind:jaxb-jxc:4.0.2'
implementation 'com.sun.xml.bind:jaxb-impl:4.0.2'
implementation 'com.sun.xml.bind:jaxb-core:4.0.2'
implementation 'org.glassfish.jaxb:jaxb-runtime:4.0.2'
implementation 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.1'
implementation 'jakarta.activation:jakarta.activation-api:2.1.0'
jaxbext 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359'
jaxbext 'net.java.dev.jaxb2-commons:jaxb-fluent-api:2.1.8'
jaxbext 'com.github.jaxb-xew-plugin:jaxb-xew-plugin:2.1'
//jaxbext 'org.jvnet.jaxb2_commons:jaxb2-basics:1.11.1'
//implementation 'org.jvnet.jaxb2_commons:jaxb2-basics-ant:1.11.1'
//implementation 'org.jvnet.jaxb2_commons:jaxb2-basics-runtime:1.11.1'
//implementation 'org.jvnet.jaxb2_commons:jaxb2-basics:1.11.1'
//implementation 'org.jvnet.jaxb2_commons:jaxb2-basics-annotate:1.1.0'
}
jaxb {
javaGen {
csClientWs {
strictValidation = false
extension = true
packageName = 'org.excample.csclient.ws'
header = true
schema = file("${projectDir}/src/main/wsdl/test_${testV}.wsdl")
binding = file("${projectDir}/src/main/wsdl/binding.xjb")
args = ['-wsdl', '-Xxew', '-Xfluent-api']
}
}
}
我希望当我取消注释 jaxbext 'com.github.jaxb-xew-plugin:jaxb-xew-plugin:2.1' 下面的所有部分时,jaxb2-basics 将正常工作,并且当我将 '-XtoString' 添加到它生成的 args 部分时正确的java类。当此部分被注释时(就像在我的示例中),它工作得很好。
尝试使用这些依赖项而不是
org.jvnet.jaxb2_commons
工件:
implementation 'org.patrodyne.jvnet:hisrc-basicjaxb-ant:2.1.0'
implementation 'org.patrodyne.jvnet:hisrc-basicjaxb-runtime:2.1.0'
implementation 'org.patrodyne.jvnet:hisrc-basicjaxb-plugins:2.1.0'
implementation 'org.patrodyne.jvnet:hisrc-hyperjaxb-annox-plugin:2.1.0'
另请参阅HiSrc BasicJAXB 项目的 2.1.0 版本是一个重要版本,其源/目标(版本)兼容性为 Java 11,高于 Java 8。并且,使用 JDK 17 进行构建。 JAXB 依赖项为 4.x 版本。
BasicJAXB V2 命名空间更改。
免责声明:我是HiSrc分叉的维护者。
迁移指南 来帮助获取最新版本的 org.jvnet.jaxb
工件。我们还在最新版本中添加了
jaxb-fluent-api
dependencies {
implementation 'com.sun.xml.bind:jaxb-xjc:4.0.2'
implementation 'com.sun.xml.bind:jaxb-jxc:4.0.2'
implementation 'com.sun.xml.bind:jaxb-impl:4.0.2'
implementation 'com.sun.xml.bind:jaxb-core:4.0.2'
implementation 'org.glassfish.jaxb:jaxb-runtime:4.0.2'
implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.1'
implementation 'jakarta.activation:jakarta.activation-api:2.1.0'
jaxbext 'com.github.jaxb-xew-plugin:jaxb-xew-plugin:2.1'
jaxbext 'org.jvnet.jaxb:jaxb-plugins:4.0.0'
//implementation 'org.jvnet.jaxb:jaxb-plugins-ant:4.0.0'
//implementation 'org.jvnet.jaxb:jaxb-plugins-runtime:4.0.0'
//implementation 'org.jvnet.jaxb:jaxb-plugins:4.0.0'
//implementation 'org.jvnet.jaxb:jaxb-plugin-annotate:4.0.0'
}
jaxb {
javaGen {
csClientWs {
strictValidation = false
extension = true
packageName = 'org.excample.csclient.ws'
header = true
schema = file("${projectDir}/src/main/wsdl/test_${testV}.wsdl")
binding = file("${projectDir}/src/main/wsdl/binding.xjb")
args = ['-wsdl', '-Xxew', '-Xfluent-api', '-XtoString']
}
}
}
只需添加您想要的好参数(添加-XtoString
)并根据需要取消注释实现部分。我还发现很奇怪,你添加了 jaxb-api“2.4.0”作为 jaxbext,在上面的配置中已被删除。