【问题标题】:Running xjc command for Java 11-works in git bash but not cygwin在 git bash 中运行 Java 11 的 xjc 命令,但在 cygwin 中无效
【发布时间】:2020-04-02 21:09:11
【问题描述】:

有趣的问题。我正在进行 Java 11 升级并在本地运行 XJC 时遇到问题。由于 XJC 不再是 JDK 的一部分,我下载了我们自己的 XJC 和所需的 jaxb 库。但是,当我通过 Cygwin 在本地运行它时,它会出错,指出它“无法找到或加载主类 com.sun.tools.xjc.XJCFacade”。经过一些调试后,我退出了正在运行的产生错误的命令,但稍作改动后,它在 Git Bash 中工作。我试图弄清楚为什么它在 Git Bash 中有效,但在 Cygwin 中无效(在 Windows 中,因为它在我的 Linux VM 上有效),以了解要修复的内容。

  1. XJC 在 Linux VM 上成功运行(所以我知道脚本是有效的)
  2. 命令(如下所列)适用于带有 Java 11 的 Windows 10 上的 Git Bash
  3. 在带有 Java 11 的 Windows 10 上的 Cygwin 中的命令(在下面进一步列出)失败

工作 Git 命令

  • /c/Programs/Amazon_Corretto/jdk11.0.5_10/bin/java -cp /c/Programs/jaxb-ri/lib/jaxb-xjc.jar:/c/Programs/jaxb-ri/lib/jakarta。 xml.bind-api.jar:/c/Programs/jaxb-ri/lib/jaxb-impl.jar:/c/Programs/jaxb-ri/lib/jaxb-jxc.jar:/c/Programs/jaxb-ri /lib/jakarta.activation.jar com.sun.tools.xjc.XJCFacade -xmlschema /c/Development/Project_Folder/path/to/some/code/filename.xsd -d /c/Development/Project_Folder/path/to/一些/代码

Cygwin 尝试失败

  • /cygdrive/c/Programs/Amazon_Corretto/jdk11.0.5_10/bin/java -cp /c/Programs/jaxb-ri/lib/jaxb-xjc.jar:/c/Programs/jaxb-ri/lib/ jakarta.xml.bind-api.jar:/c/Programs/jaxb-ri/lib/jaxb-impl.jar:/c/Programs/jaxb-ri/lib/jaxb-jxc.jar:/c/Programs/jaxb -ri/lib/jakarta.activation.jar com.sun.tools.xjc.XJCFacade -xmlschema /c/Development/Project_Folder/path/to/some/code/filename.xsd -d /c/Development/Project_Folder/path/到/一些/代码
  • /cygdrive/c/Programs/Amazon_Corretto/jdk11.0.5_10/bin/java -cp /cygdrive/c/Programs/jaxb-ri/lib/jaxb-xjc.jar:/cygdrive/c/Programs/jaxb- ri/lib/jakarta.xml.bind-api.jar:/cygdrive/c/Programs/jaxb-ri/lib/jaxb-impl.jar:/cygdrive/c/Programs/jaxb-ri/lib/jaxb-jxc。 jar:/cygdrive/c/Programs/jaxb-ri/lib/jakarta.activation.jar com.sun.tools.xjc.XJCFacade -xmlschema /cygdrive/c/Development/Project_Folder/path/to/some/code/filename. xsd -d /cygdrive/c/Development/Project_Folder/path/to/some/code
  • /cygdrive/c/Programs/Amazon_Corretto/jdk11.0.5_10/bin/java -cp /c/Programs/jaxb-ri/lib/jaxb-xjc.jar:/c/Programs/jaxb-ri/lib/ jakarta.xml.bind-api.jar:/c/Programs/jaxb-ri/lib/jaxb-impl.jar:/c/Programs/jaxb-ri/lib/jaxb-jxc.jar:/c/Programs/jaxb -ri/lib/jakarta.activation.jar com.sun.tools.xjc.XJCFacade -xmlschema /cygdrive/c/Development/Project_Folder/path/to/some/code/filename.xsd -d /cygdrive/c/Development/ Project_Folder/path/to/some/code

【问题讨论】:

  • 我一直在继续研究它。以下命令在 cygwin 中“有效”,但引发异常。命令:java -cp cygpath -w "/cygdrive/c/Programs/jaxb-ri/jaxb-xjc.jar;/cygdrive/c/Programs/jaxb-ri/jakarta.xml.bind-api.jar;/cygdrive/c/Programs/jaxb-ri/jaxb-impl.jar;/cygdrive/c/Programs/jaxb-ri/jaxb-jxc.jar;/cygdrive/c/Programs/jaxb-ri/jakarta.activation.jar"com.sun.tools.xjc.XJCFacade
  • 线程“main”中的异常 java.lang.NoClassDefFoundError: javax/xml/bind/JAXBContext at com.sun.tools.xjc.ClassLoaderBuilder.createProtectiveClassLoader(ClassLoaderBuilder.java:45) at com.sun .tools.xjc.XJCFacade.main(XJCFacade.java:44) 引起:java.lang.ClassNotFoundException: javax.xml.bind.JAXBContext at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:第581章)
  • 您是否尝试过使用适用于 Windows 的 Linux 子系统而不是 cygwin?
  • 我没有。此时的指令是使用 Cygwin 来维护我们的 Windows 构建过程。他们可能会在某个地方对使用 gitbash 持开放态度,但目前我被 Cygwin 困住了。

标签: cygwin git-bash java-11 xjc


【解决方案1】:

所以我已经确定了路径格式的问题。

经过大量试验和错误以及一些头脑风暴后,我发现 jar 文件的路径必须是 Windows 格式,并带有分号分隔符。不知何故,在我的试验中,我最终使用了带有“:”分隔符的 Windows 路径,后来当我正确使用 Windows 格式和分号分隔符时,我使用了不需要的“cygpath -w”。

所以

"java -cp "C:\Program File\Path\jaxb-xjc.jar;C:\Program File\Path\jaxb-impl.jar..." com.sun.tools.xjc.XJCFacade.

【讨论】:

    猜你喜欢
    • 2020-03-24
    • 2022-12-11
    • 1970-01-01
    • 2021-11-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多