java - Eclipse Gradle 项目:JAXB 不会从嵌套的 WSDL 文件创建 java 类
问题描述
我有 2 个 .wsdl 文件和 4 个 .xsd 文件。wsdl1
导入wsdl2
和wsdl2
导入所有 4 个 xsd 文件。我在 Eclipse Neon 中有一个 Gradle 项目并想使用
task genJaxb {
ext.sourcesDir = "${buildDir}/generated-sources/jaxb"
ext.classesDir = "${buildDir}/classes/jaxb"
ext.schema = "src/main/resources/wsdl1.wsdl"
outputs.dir classesDir
doLast() {
project.ant {
taskdef name: "xjc", classname: "com.sun.tools.xjc.XJCTask",
classpath: configurations.jaxb.asPath
mkdir(dir: sourcesDir)
mkdir(dir: classesDir)
xjc(destdir: sourcesDir, schema: schema) {
arg(value: "-wsdl")
produces(dir: sourcesDir, includes: "**/*.java")
}
javac(destdir: classesDir, source: 1.6, target: 1.6, debug: true,
debugLevel: "lines,vars,source",
classpath: configurations.jaxb.asPath) {
src(path: sourcesDir)
include(name: "**/*.java")
include(name: "*.java")
}
copy(todir: classesDir) {
fileset(dir: sourcesDir, erroronmissingdir: false) {
exclude(name: "**/*.java")
}
}
}
}
}
从 wsdl 文件生成 java 类。它不起作用,但 Gradle 将 jaxb 任务显示为绿色。如果我改为这样做ext.schema = "src/main/resources/wsdl2.wsdl"
,它会成功生成类,但我缺少来自wsdl1
.
回答后编辑:
task generateJava {
inputs.file = "src/main/resources/wsdl1.wsdl"
outputs.dir = "${buildDir}/generated/java"
doLast {
project.ant {
taskdef name: "xjc", classname: "com.sun.tools.xjc.XJCTask",
classpath: configurations.jaxb.asPath
mkdir" ${buildDir}/generated/java"
xjc(destdir: file(${buildDir}/generated/java).absolutePath, schema: inputs) {
arg(value: "-wsdl")
produces(dir: outputs, includes: "**/*.java")
}
}
}
}
sourceSets.main.java {
srcDir "{$buildDir}/generated/java"
}
compileJava.dependsOn generateJava
抛出以下错误:No such property: file for class: org.gradle.api.internal.tasks.DefaultTaskInputs Possible solutions: files
解决方案
你并没有完全以 Gradle 的方式思考。这是你应该做的:
- 在 $buildDir 下的目录中生成您的 java 文件,以便通过“clean”任务清理它(永远不要在 src/main/java 中生成)
- 将生成的目录添加到“main”SourceSet(因此它由“java”插件中的 compileJava 任务编译)
- 使“compileJava”任务取决于您的任务
- 确保在您的任务上配置任务输入/输出以支持 UP-TO-DATE 跳过
例如:
apply plugin: 'java'
task generateJava {
inputs.file 'src/main/resources/mywsdl.wsdl'
outputs.dir "$buildDir/generated/java"
doLast {
mkdir "$buildDir/generated/java"
ant {
taskdef(name: 'xjc', ...)
xjc(destdir: "$buildDir/generated/java", ...) {
...
}
}
}
}
sourceSets.main.java {
srcDir "$buildDir/generated/java"
}
compileJava.dependsOn generateJava
推荐阅读
- reactjs - 单击输入时反应小部件组合框打开
- c# - UWP RichEditBox 保存时自动向 rtf 添加新行
- html - 如何编辑 WordPress v4.9.5 页面的 html 代码
- caching - Elixir:Nebulex(缓存库)错误
- c++ - 无法将文件添加到 .zip 文件
- css - 在运行时更改 SASS 或 LESS 变量值
- vue.js - 我的 Vuetify Switch 没有改变他的值?
- python - pandas 函数返回多个值错误 - TypeError: unhashable type: 'list'
- php - 如何在视图中解释从数据库中获取的一些 html?
- json - 如何在 Eclipse 中进行 json 模式验证