首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java 11中调用原理图?

如何在Java 11中调用原理图?
EN

Stack Overflow用户
提问于 2018-07-23 18:27:21
回答 3查看 3.6K关注 0票数 6

根据Oracle文档,作为JEP 320 (http://openjdk.java.net/jeps/320)的一部分,模式工具将从JDK中删除。JEP指向Maven工件,这些工件现在提供了缺少的工具。工件的坐标在JEP中是错误的,更新的坐标可以在以下问题的答案中找到:在Maven项目中,我应该为JAXB使用哪些工件?

然而,缺少的是如何调用这些工具。JEP中指向的shell脚本位于JAXB存储库中。然而,这些脚本仍然没有文档化,很难调用。git中的构建说明表明它是用标准的"mvn干净安装“构建的,但是这不会产生与文档中使用的'bin‘文件夹相匹配的输出结构:https://javaee.github.io/jaxb-v2/doc/user-guide/ch04.html#tools-schemagen

理想情况下,我希望从Gradle运行模式,避免shell脚本,因为它们不是从maven依赖项中获得的。

我目前的尝试是从一个名为“旧schemagen.exe”的工作版本中改编的,如下所示:

(在“real”build.gradle文件中有更多内容来指定应用程序的依赖关系,等等)

代码语言:javascript
复制
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")
    }
  }
}

但是,这会导致一个错误:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-24 15:15:31

jaxb-*:2.3.0版本的https://github.com/javaee/jaxb-v2/issues/1168似乎已经知道了这个问题。此外,这将通过运行在java-9上的jaxb的已知问题中标记的未来版本来解决。

你可以在评论后解决这个问题 -

请尝试2.4.0-b180725.0644 -这是JPMS模块化的RI在JDK上使用java.xml.bind模块(9,10)和那些没有它的(11-ea)

或者从同一个链接中试着下载二进制分布。

票数 3
EN

Stack Overflow用户

发布于 2018-07-27 15:11:24

Schemagen和xjc脚本仅放在./bin目录中的二元分布中。

对于构建工具,有一些插件(Maven / Gradle)可以调用模式和xjc,为用户提供简单的配置。

手动调用com.sun.tools.jxc.SchemaGeneratorFacade的尝试也是正确的,这里是Maven的类似示例。但是,您可能会将2.3.0放在模块路径上,这有一个拆分包问题。设置类路径将解决2.3.0的问题。JAXB的下一个版本将准备好JPMS并声明模块描述符。您可以尝试beta构建(2.4.0-b180725.0644),下面是一组正确的依赖项:

代码语言:javascript
复制
<dependency>
  <groupId>org.glassfish.jaxb</groupId>
  <artifactId>jaxb-runtime</artifactId> <!--jaxb runtime-->
</dependency>

<dependency>
  <groupId>org.glassfish.jaxb</groupId>
  <artifactId>jaxb-xjc</artifactId> <!--java generation-->
</dependency>

<dependency>
  <groupId>org.glassfish.jaxb</groupId>
  <artifactId>jaxb-jxc</artifactId> <!--schema generation-->
</dependency>
票数 2
EN

Stack Overflow用户

发布于 2020-08-10 09:16:41

如果试图直接使用jaxb-ri下载中的schemagen,请注意schemagen.bat中的JAXB_PATHjaxb-ri.zip文件中的mod目录不一致。

例如使用schemagen.bat

  • 到目前为止,从jaxb-ri-2.3.1.zip下载https://maven.java.net/content/repositories/releases/com/sun/xml/bind/jaxb-ri/2.3.1/ ( 2.4.0-betas也缺少了mod/javax.activation-api.jar )
  • 使用这些步骤运行schemagen.bat,并酌情设置JAXB_HOME: set JAXB_HOME=C:\Java\jaxb-ri-2.3.1 set CLASSPATH=%JAXB_HOME%/mod/relaxng-datatype.jar;%JAXB_HOME%/mod/javax.activation-api.jar %JAXB_HOME%\bin\schemagen.bat -cp myjar1.jar;myjar2.jar -d -d com.company.ClassName1 com.company.ClassName2

(这是针对JDK 11的)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51485137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档