- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
根据 Oracle 文档,schemagen 工具已作为 JEP 320 (http://openjdk.java.net/jeps/320) 的一部分从 JDK 中删除。该 JEP 指向现在提供缺失工具的 Maven 工件。工件的坐标在 JEP 中是错误的,更新后的坐标可以在这个问题的答案中找到: Which artifacts should I use for JAXB RI in my Maven project?
但是缺少的是如何调用这些工具。 JAXB-RI Git 存储库中的 JEP 中指向一些 shell 脚本。然而,这些脚本仍未记录且难以调用。该 git repo 中的构建说明表明它是使用标准“mvn clean install”构建的,但是它不会产生与此处文档中使用的“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")
}
}
}
但是,这会导致错误:
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
最佳答案
jaxb-*:2.3.0
版本似乎已知该问题 - #jaxb-v2/issues/1168 。此外,这将通过 known issues 中标记的 future 版本解决。在 java-9 上运行的 jaxb。
您可以 resolve this在评论之后 -
Please try 2.4.0-b180725.0644 - this is JPMS modularized RI working on JDKs with java.xml.bind module (9,10) and those without it (11-ea)
或try downloading来自同一链接的二进制分发。
关于java - 如何在 Java 11 中调用 schemagen?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51485137/
我是一名优秀的程序员,十分优秀!