运行用于Java11的xjc命令可以在GitBash中工作,但不能在cygwin中工作

运行用于Java11的xjc命令可以在GitBash中工作,但不能在cygwin中工作,cygwin,git-bash,java-11,xjc,Cygwin,Git Bash,Java 11,Xjc,有趣的问题。我正在进行Java11升级,在本地运行XJC时遇到了问题。由于XJC不再是JDK的一部分,我下载了我们自己的XJC和所需的jaxb库。然而,当我通过Cygwin在本地运行它时,它会出现错误,指出它“无法找到或加载主类com.sun.tools.xjc.xjcafacade”。经过一些调试后,我取出了正在运行的命令,该命令产生了错误,但只做了一点小改动,它就可以在Git Bash中工作。我试图弄清楚为什么它在Git Bash中工作,而在Windows中不工作,因为它在我的Linux虚拟

有趣的问题。我正在进行Java11升级,在本地运行XJC时遇到了问题。由于XJC不再是JDK的一部分,我下载了我们自己的XJC和所需的jaxb库。然而,当我通过Cygwin在本地运行它时,它会出现错误,指出它“无法找到或加载主类com.sun.tools.xjc.xjcafacade”。经过一些调试后,我取出了正在运行的命令,该命令产生了错误,但只做了一点小改动,它就可以在Git Bash中工作。我试图弄清楚为什么它在Git Bash中工作,而在Windows中不工作,因为它在我的Linux虚拟机上工作,以便了解需要修复什么

XJC在Linux虚拟机上成功运行,因此我知道脚本是有效的 下面列出的命令适用于Windows10和Java11上的GitBash 下面进一步列出的命令在使用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 jxc.jar:/c/Programs/jaxb ri/lib/jakarta.activation.jar.com.sun.tools.xjc.xjc/c/Development/Project_Folder/path/to/some/code/filename.xsd-d/c/Development/Project_Folder/path/to/some/code 使用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-jxc.jar:/c/Programs/jaxb-ri/lib/jakarta.activation.jar.com.sun.tools.xjc-xmlsa/c/Development/Project_Folder/path/to/some/code/filename.xsd-d/c/Development/Project_Folder/path/to/some/code /cygdrive/c/Programs/Amazon_Corretto/jdk11.0.5_10/bin/java-cp/cygdrive/c/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/jakarta.jar:/cgdrive/c/c/c/c/c/c/c/jaxb/jakarta.jar.com-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-jxc.jar:/c/Programs/jaxb-ri/lib/jakarta.activation.jar.com.sun.tools.xjc-xmlsa/cygdrive/c/Development/Project_Folder/path/to/some/code/filename.xsd-d/cygdrive/c/Development/Project_Folder/path/to/some/code
因此,我已确定问题在于路径格式

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

所以


我一直在深入研究。下面的命令在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/线程主java.lang.NoClassDefFoundError中的cygdrive/c/Programs/jaxb ri/jakarta.activation.jar com.sun.tools.xjc.xjc.xjcadeException错误:javax/xml/bind/JAXBContext位于com.sun.tools.xjc.classloaderClassLoaderBuilder.java:45位于com.sun.tools.xjc.xjcafacade.mainxjcafacade.java:44,原因如下:java.lang.ClassNotFoundException:javax.xml.bind.JAXBContext位于java.base/jdk.internal.loader.BuiltinClassLoader.loadClassBuiltinClassLoader.java:581位于java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadclassclassclassclassclassclassloaders.java:178位于java.base/java.lang.ClassLoader.loadclassclassclassloader.jav您是否尝试过使用Linux子系统而不是cygwin?我没有。此时,指令是使用Cygwin维护我们的Windows构建过程。可能在将来的某个地方,他们可能会开放使用gitbash,但现在我只能使用Cygwin。
"java -cp "C:\Program File\Path\jaxb-xjc.jar;C:\Program File\Path\jaxb-impl.jar..." com.sun.tools.xjc.XJCFacade.