1

Из CMD.exe я могу запустить xjc следующим образом:

xjc "c:/schema.xsd" -p abc -d "temp"

Из git Bash я могу запустить xjc следующим образом:

xjc "/c/schema.xsd" -p abc -d "temp"

Что касается Cygwin, я могу заставить его работать, только если я вызываю xjc.exe с использованием синтаксиса CMD.exe.

Это проблематично, потому что сценарий, столкнувшийся с этой проблемой, использует $ {PWD} для получения пути к текущему каталогу, который разрешается в «/c», а не «c:/».

Даже имея хакерскую замену «/c» на «c:/», я все же хотел бы знать, почему xjc принимает путь unix при вызове git Bash, но не Cygwin.

1 ответ1

1

Проблема двоякая:

  1. вы используете исполняемый файл Windows, который ожидает пути Windows и
  2. bash расширяет пути к собственным собственным путям Cygwin.

В cygwin правильный путь для c:\schema.xsd будет переводиться в /cygdrive/c/schema.xsd (не в /c/schema.xsd , если вы не создали символическую ссылку.) Почему git-bash (это тот, который поставляется msysgit?) позволяет использовать /c/schema.xsd качестве допустимого пути, вне моего понимания .

Когда вы вызываете xcj с одним файлом в качестве параметра (который распознает bash/cygwin), он получит дескриптор файла, а не его путь. Однако, если это просто строка, эта строка будет передана в качестве параметра в приложение без дальнейшего анализа и расширения строки.

Вы можете либо подойти к этой проблеме, пытаясь использовать cygpath (см. Использование-cygwin-эффективно и cygpath-info) для передачи правильного пути Windows, или, если это только один файл, попытаться передать правильный (unix/cygwin) файл дорожка.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .