LINUX.ORG.RU

cygwin и java


0

0

Очень прошу дать совет по следующей проблеме: Я являюсь пользователем ОС Windows задача состоит в том, чтобы собрать из исходных кодов Linux программу. С помощью cygwin удалось успешно откомпилировать коды. Программа содержит приложение на Java которое написано под j2sdk 1.3.1. Linux версия JDK под cygwin не устанавливается, да и в инете рекомендуют ставить под cygwin JDK для Windows, что я и сделал. Проблема в том, что JAVA программа является графической оболочкой для утилит на С++. Так как эти утилиты являются linux приложениями, то при вызове их из Windows Java возникает ошибка с форматом путей в стиле DOS. Если бы JDK было бы тоже под cygwin, то проблемы бы не возникло. Следующий JAVA-код определяет разделитель путей public class Constants { ... public static final String FILE_SEPARATOR = System.getProperty("file.separator"); public static final String NEW_LINE = System.getProperty("line.separator"); ... } Правда, я подозреваю, что кроме разделителя возникает проблема с преобразованием путей вида c:\...\ к /cygdrive/c/.../

Есть ли красивое решение этой проблемы без значительной модификации исходного кода?

anonymous

Запустить всё под линуксом, ходить на него через vnc?

mv ★★★★★
()

>Проблема в том, что JAVA программа является графической оболочкой для утилит на С++.

А каким образом она общается с утилитами?

Если это отдельно запускаемые бинарики, то можно их заменить на прослойку, которая перелопатит входные данные, заменит пути и передаст их реальной утилите.

Или запустить linux в виртуальной машине и не мучаться :)

anonymous
()

В Linux есть собственная имплементация виртуальной машины Java, так что ставить Windows-версию JRE/JDK нет никакого смысла.

Java-код переносим без перекомпиляции, если в программе на Java не используются явно системно-зависимые свойства.

Получение значения через вызов метода:
String FILE_SEPARATOR = System.getProperty("file.separator");
например, не является системно-зависимым и сделано именно ради переносимости java-программы, чтобы она не нуждалась в перекомпиляции.

Красивое решение проблемы: установить JRE/JDK на Linux из репозитория или скачать отсюда: http://download.java.net/jdk6/
"Linux self-extracting JDK file
jdk-6u10-ea-bin-b10-linux-i586-11_jan_2008.bin, 67.58 MB"


(JRE — это рантайм-среда исполнения Java; JDK — это средство разработки с рантайм-средой исполнения)

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

iZEN - прочти пожалуйста вопрос, прежде чем писать ответ! Человек переносит линуксовую программу в Винду путем компиляции под cygwin - нафига ему линуксовый jdk ?

anonymous
()

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

svu ★★★★★
()
Ответ на: комментарий от svu

Спасибо за советы! Очевидно, что моя проблема не в специфических отличиях JDK под Win32 b Linux, а в том, что JAVA код думает что работает под ОС Windows, а бинарники - под Linux, в этом их обманывает Cygwin. Было предложено два решения: 1. поставить виртуальную машину для Linux на которой все будет работать полностью в родной среде. А что тогда можно сказать по поводу производительности такого варианта относительно Linux на реальной машине? 2. Модифицировать JAVA код, для того чтобы преобразовывать пути к стилю cygwin/Linux. Второй вариант мне нравится, но он требует изменения исходного кода, что наверно не слишком хорошо с точки зрения стиля. Может ли кто-нибудь оценить насколько виртуальная машина будет проигрывать в производительности второму варианту - т. е. VM против Cygvin?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.