【问题标题】:Unable to run JOOQ GenerationTool with Java 11 (NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema)无法使用 Java 11 运行 JOOQ GenerationTool (NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema)
【发布时间】:2020-01-13 16:40:25
【问题描述】:

我尝试按照文档here 中所述使用此命令行运行代码生成:

java -classpath "jooq-3.12.3.jar;jooq-meta-3.12.3.jar;jooq-codegen-3.12.3.jar;mysql-connector-java-5.1.18-bin.jar;." org.jooq.codegen.GenerationTool library.xml

我收到以下错误:

Jan 10, 2020 5:10:45 PM org.jooq.tools.JooqLogger info
INFO: Initialising properties : library.xml
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at org.jooq.util.jaxb.tools.MiniJAXB.getNamespace(MiniJAXB.java:389)
...

我正在使用 Java 11:

openjdk version "11.0.5" 2019-10-15
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.5+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.5+10, mixed mode)

我错过了什么? PS。我对 Java 世界很陌生...

【问题讨论】:

    标签: java jooq java-11


    【解决方案1】:

    问题与删除 JAXB api 有关,因为它被认为是 JAVA EE API 的一部分,因此自 Java 9 以来从 JDK 中删除(有关详细信息,请参阅this 问题)。

    您可以通过将jaxb-api jar 添加到您的类路径来解决您的问题:

    java -classpath "jooq-3.12.3.jar;jooq-meta-3.12.3.jar;jooq-codegen-3.12.3.jar;reactive-streams-1.0.2.jar;mysql-connector-java-5.0.7.jar;jaxb-api-2.3.1.jar" org.jooq.codegen.GenerationTool library.xml
    

    请注意,我还必须将 reactive-streams-1.0.2 jar 添加到类路径(如教程所述)。

    并在我粘贴的命令中将 MySQL 驱动程序 jar 更改为您的 jar。因此,您的最终命令将是:

    java -classpath "jooq-3.12.3.jar;jooq-meta-3.12.3.jar;jooq-codegen-3.12.3.jar;reactive-streams-1.0.2.jar;mysql-connector-java-5.1.18-bin.jar;jaxb-api-2.3.1.jar" org.jooq.codegen.GenerationTool library.xml
    

    【讨论】:

      【解决方案2】:

      JAXB API 是 jOOQ 的一个不幸的外部依赖项,我们一直在尝试在最近的版本中逐步删除它。我们已经移除了 JAXB 实现依赖,但是我们仍然依赖于 jOOQ 的各个部分的 API。

      在 JDK 11+ 中也应该可以使用 jOOQ 和 jOOQ 的代码生成器,而无需将 JAXB API 显式放在类路径中。我创建了一个问题来解决这个特定问题:https://github.com/jOOQ/jOOQ/issues/9723

      MiniJAXB 类已经是一种解决方法,可以避免依赖于 JAXB 实现。 jOOQ 将来也应该避免依赖 JAXB API。

      目前,如果您不想使用 Maven 或 Gradle 为您解决传递依赖关系,michalk's solution 是唯一可行的。

      【讨论】:

        猜你喜欢
        • 2018-05-02
        • 2023-04-09
        • 1970-01-01
        • 2021-09-13
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        相关资源
        最近更新 更多