从 CMD.exe,我可以按如下方式运行 xjc:
xjc "c:/schema.xsd" -p abc -d "temp"
从 git Bash,我可以按如下方式运行 xjc:
xjc "/c/schema.xsd" -p abc -d "temp"
就 Cygwin 而言,只有使用 CMD.exe 语法调用 xjc.exe 才能使其工作。
这是有问题的,因为遇到此问题的脚本依赖于 ${PWD} 来获取当前目录的路径,该路径解析为“/c”,而不是“c:/”。
即使用“c:/”替换“/c”,我仍然想知道为什么 xjc 在由 git Bash 调用时接受 unix 路径,但在 Cygwin 调用时却不接受。
答案1
问题有两个方面:
- 您正在使用需要 Windows 路径的 Windows 可执行文件,并且
- bash 将路径扩展为其自己的本机 cygwin 路径。
在 cygwin 中,正确的路径c:\schema.xsd
应为/cygdrive/c/schema.xsd
(不是 /c/schema.xsd
,除非您创建了符号链接。)为什么 git-bash(msysgit 附带的那个吗?)允许您用作/c/schema.xsd
有效路径,这让我无法理解。
当您使用一个文件作为参数(bash/cygwin 可识别)调用 xcj 时,它将接收文件句柄而不是其路径。但是,如果它只是一个字符串,则该字符串将作为参数传递给应用程序,而无需进一步解析和字符串扩展。
您可以通过尝试使用 cygpath 来解决此问题(请参阅有效使用 cygwin 和cygpath 信息) 来传递正确的 Windows 路径,或者,如果只有一个文件,则尝试传递正确的 (unix/cygwin) 文件路径。