2016-03-07 3 views
0

У меня есть настройка cygwin и вы хотите использовать ее для запуска Java-приложений.CYGWIN: все пути находятся в cygwin/формате и непонятны java

Когда я бегу ява -cp {pathToMyJar} MainClass в окнах консоли это работает, как ожидалось.

Когда я запускаю ту же команду в cygwin - она ​​работает тоже.

Когда я бегу, что предназначено для запуска в Cygwin Java -cp {/ cygdrive/pathToMyJar} MainClass - он терпит неудачу, он не может найти класс.

Почему я хочу запустить его в cygwin? Потому что во многих приложениях есть скрипты sh, которые вычисляют classpathes. Если вы запускаете эти скрипты через cygwin, это приводит к тому, что classpathes имеет этот/cygdrive/prefix. И затем вы запускаете Java-приложение, и оно терпит неудачу, потому что java не понимает префикс classpath cygwin.

Я прочитал, что я могу заставить Cygwin удалить этот префикс: https://unix.stackexchange.com/questions/44677/how-do-i-get-rid-of-cygwins-cygdrive-prefix-in-all-paths

ОК, но вопрос:

Если путь Cygwin по умолчанию не понятно для приложений - как она предназначена для работы? Каков правильный способ работы с cygwin? Я вполне уверен, что для этой проблемы должно быть какое-то «дружественное cygwin» решение.

ответ

2

Как я понимаю, для того, чтобы Java понимала пути Cygwin, его пришлось бы скомпилировать в среде Cygwin.

Если вы используете sh скрипты для вывода путей, предназначенных для потребления Java Windows, вы можете использовать утилиту cygpath для преобразования пути в форме Windows, например,

$ cygpath -w ~ 
C:\cygwin64\home\anthony 

Фактически, в документации Cygwin перечислены java в качестве хорошего варианта использования утилиты cygpath. От Using Cygwin effectively with Windows:

Несколько программ требуют для Windows-стиле, разделенных точкой с запятой список путь, который cygpath может перевести с пути POSIX с опцией -p. Например, Java компиляция из Баша может выглядеть следующим образом:

javac -cp "$(cygpath -pw "$CLASSPATH")" hello.java 

С помощью кавычек и Подоболочек несколько неудобно, часто бывает предпочтительнее использовать cygpath в сценариях оболочки.

Смежные вопросы