swp*_*mer 5 java jaxb2 gradle schemagen java-11
根据Oracle文档,schemagen工具已作为JEP 320(http://openjdk.java.net/jeps/320)的一部分从JDK中删除。JEP指出了现在提供缺少工具的Maven工件。在JEP中,工件的坐标是错误的,可以在以下问题的答案中找到更新的坐标: 我的Maven项目中应为JAXB RI使用哪些工件?
但是缺少的是如何调用工具。JEP中指向的Shell脚本位于JAXB-RI Git存储库中。但是,这些脚本仍然没有文档记录,很难调用。该git repo中的构建说明指示它是使用标准的“ mvn全新安装”构建的,但是不会产生与此处文档中使用的“ bin”文件夹相匹配的输出结构:https : //javaee.github.io /jaxb-v2/doc/user-guide/ch04.html#tools-schemagen
理想情况下,我想从Gradle运行schemagen,避免使用shell脚本,因为它们不是从maven依赖项获得的。
我当前的尝试是从一个称为旧schemagen.exe的工作版本改编而成,看起来像这样:
(“真实” build.gradle文件中还有更多内容可以指定我的应用程序的依赖关系,等等。)
configurations {
schemagenTool
}
dependencies {
schemagenTool "org.glassfish.jaxb:jaxb-jxc:${jaxbVersion}"
}
task schemaGen(type: Exec, dependsOn: [compileJava,configurations.schemaGenTool]) {
workingDir projectDir
executable 'java'
doFirst {
file('build/Schemas').mkdirs()
args '--module-path', "${configurations.schemaGenTool.asPath}",
'-m', 'jaxb.jxc/com.sun.tools.jxc.SchemaGeneratorFacade',
// Note: automatic module name is NOT com.sun.tool.jxc
// as documented
// Args to schemagen (these worked for the schemagen.exe)
'-d', 'build/Schemas',
'-classpath', "${compileJava.destinationDir}${File.pathSeparator}${configurations.compile.asPath}",
"src/main/java/path/to/my/ModelClass.java"
//println "\nschemagen: ${args.join(' ')}\n"
}
doLast {
// Above creates "build/Schemas/schema1.xsd" (despite printing a different path!)
// Rename it
def destFile = file('build/Schemas/model.xsd')
destFile.delete()
if (!file('build/Schemas/schema1.xsd').renameTo(destFile)) {
throw new GradleException("Failed to write new build/Schemas/model.xsd")
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这会导致错误:
Error occurred during initialization of boot layer
java.lang.module.ResolutionException: Modules jaxb.runtime and jaxb.core export package com.sun.xml.bind.marshaller to module relaxngDatatype
Run Code Online (Sandbox Code Playgroud)
这个问题似乎是已知的版本jaxb-*:2.3.0- #jaxb-v2/issues/1168。此外,这个问题将在未来的版本中得到解决,如在java-9 上运行的 jaxb 的已知问题中所标记的那样。
您可以根据评论解决此问题-
请尝试2.4.0-b180725.0644 - 这是 JPMS 模块化 RI,适用于带有 java.xml.bind 模块 (9,10) 和不带 java.xml.bind 模块 (11-ea) 的 JDK
或者尝试从同一链接下载二进制发行版。
| 归档时间: |
|
| 查看次数: |
1620 次 |
| 最近记录: |