Я сделал это один раз и столкнулся с несколькими проблемами, подробно описанными ниже. Если вы разделите все декларации среды и пути инструментов в один файл с проверками работоспособности, и вы будете разумны в использовании символических ссылок, вы сможете поддерживать одну сборку в обеих средах.
Windows использует ;
в качестве разделителя пути вместо :
Если ваши сценарии используют PATH и CLASSPATH и другие переменные среды, унаследованные от среды Windows, то сценарии, предполагающие, что они могут разделять / объединять пути в :
, будут сбиты с толку.
Аналогично, пути, содержащие точки с запятой, сбивают с толку. Мало кто из сценариев делает это, поскольку точка с запятой в любом случае является специальным символом в bash, но при отладке полезно помнить об этом.
Симлинки рода работ
Некоторые системы сборки, которые я видел, строили деревья символических ссылок. Симлинки в cygwin работают нормально с инструментами, скомпилированными для cygwin, но если вы передадите симлинк в java-программу и ожидаете, что она автоматически разыменовывает ее, то вы, вероятно, будете удивлены.
Нет единого корневого каталога
Тщательно написанные Java-программы могут обойти проблему, заключающуюся в том, что не существует единственного /
, и двоичные файлы, скомпилированные / связанные с Cygwin, могут справиться, потому что есть поддельный каталог /cygdrive/
и поддельный /
, но другие инструменты могут этого не делать.
Для меня это не было настоящей проблемой, поскольку сценарии сборки не должны переходить от /
, но я упоминаю это как еще один источник путаницы.