Есть ли Java SDK для Cygwin? - PullRequest
       26

Есть ли Java SDK для Cygwin?

5 голосов
/ 23 июня 2009

Есть ли Java-SDK для Cygwin?

Ответы [ 2 ]

2 голосов
/ 23 июня 2009

Было бы неплохо, если бы существовала собственная реализация cygwin, которая использовала для отображения файловую систему cygwin и X-windows, к сожалению, я не знаю о таком выпуске. Я бы предположил, что это довольно трудная задача для портирования OpenJDK, но я не пробовал.

0 голосов
/ 31 декабря 2015

Хотя для Cygwin не существует java sdk, вы можете заставить работать Windows jdk, если вы готовы использовать обходные пути для различных проблем:

  • некоторые пути cygwin обрабатываются не так, как ожидается Java-программами
  • разделитель пути к файлу - это косая черта вместо косой черты
  • разделитель записи PATH - точка с запятой вместо двоеточия

По моему опыту, первая пуля - безусловно самая большая проблема, хотя эти три в некоторой степени взаимосвязаны. Сепараторы, как правило, заботятся о себе как побочный эффект решения первой проблемы.

Все три проблемы в значительной степени решаются путем настройки среды разработки, в которой все представляющие интерес пути к файлам (с точки зрения java.io.File, java.nio.Path и т. Д.) Могут быть представлены без указания буквы диска.

Как оказалось, редко нужно использовать обратную косую черту в строке пути к файлу под Windows. Единственные исключения из этого правила, с которыми я столкнулся, - это когда в качестве параметров передаются строки пути к файлу при порождении командной строки для программы, требующей обратной косой черты (например, CMD.EXE). Все пакеты java.io и java.nio допускают прямую косую черту, как и библиотеки разработки Microsoft. Большинство программ, которые отклоняют путь с косой чертой (IMHO), вероятно, делают это безвозмездно.

Итак, реальная проблема в том, что "/ cygdrive / c" не распознается java.io.File как ссылающийся на "C: \".

Другими словами, следующий тест файла вернет false:

new java.io.File("/cygdrive/c").exists()

тогда как это работает, как и ожидалось:

new java.io.File("c:/").exists()

Последние версии Windows теперь поддерживают общие символические ссылки, предоставляя способ настройки среды разработки Cygwin, в которой буквы дисков не используются. При едином представлении всей файловой системы (все файлы отображаются ниже «/», буква диска по умолчанию неизменна, например, C :), буква диска может быть удалена из строк пути к файлу. Другими словами, вы хотите иметь возможность ссылаться на «c: /» как «/». Это может быть выполнено различными способами, один из которых заключается в символической привязке других дисков ниже c: /, например:

$ ln -sFT d:/ c:/d

Если переменная env CYGWIN содержит «winsymlinks: native», это создаст символическую ссылку Windows, в результате (если предположить, что c: диск по умолчанию) ваша Java-программа будет правильно распознавать строку «/ d» как ссылку на « D: \ ", так что вы можете сделать это:

new java.io.File("/d").isDirectory // returns true, as expected

Если вы не можете или не хотите изменять свою среду cygwin, существует другой подход, который является более универсальным. Вы можете расширить java.io.File и переопределить конструкторы и различные методы для (по сути) преобразования путей cygwin в их эквивалент Windows (например, cygpath -m или -w), а также для перевода строк пути Windows в более POSIX-подобный формат. , У меня есть такая библиотека (написанная на Scala, но используемая из Java), и я собираюсь сделать ее доступной, надеюсь, скоро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...