Проблемы с портированием Java на J # - PullRequest
4 голосов
/ 24 марта 2009

У меня есть кодовая база среднего размера (код 25k строк, тесты 25k строк) в java, и я хотел бы перенести его для работы на CLR, а также на JVM.

Только основной класс и несколько утилит тестирования каким-либо образом связаны с файловой системой или ОС. Остальная часть кода широко использует API-интерфейсы универсальных коллекций: java.util.regex, java.net (но не URL или URLConnection), java.io для кодирования / декодирования кодировки, java.text для нормализации юникода и org.w3c. Дом для манипулирования XML.

Возможно ли получить большую часть кода, компилируемого под J # и Java, а затем перенести остальное?

Если так, с какими ловушками я могу столкнуться?

спасибо заранее, микрофон

Ответы [ 3 ]

7 голосов
/ 24 марта 2009

Выезд ИКВМ: http://www.ikvm.net/

Позволяет запускать (специально скомпилированный) код Java внутри .Net CLR.

Некоторые из моих коллег успешно использовали его с кодовой базой Java более 1 миллиона строк кода.

4 голосов
/ 24 марта 2009

Ловушки:

  • Что-нибудь подобное пугает меня до чертиков. Количество действительно тонких ошибок, ожидающих появления, огромно.
  • J # поддерживает только Java 1.1.4 AFAIK - до свидания дженерики и т. Д.
  • Visual Studio 2008 не поддерживает J # - в основном это мертвый проект.

Я подозреваю, что на самом деле вам будет проще переписать его в C # (включая изучение C #, если вы этого еще не знаете - это радость). Таким образом, в итоге вы получите более идиоматически подобную .NET-подобную библиотеку, если это уместно: если вы когда-нибудь захотите, чтобы другой разработчик .NET использовал ваш код, они, вероятно, будут гораздо счастливее с «чистым». NET проект, чем один, использующий J #.

Недостатком является то, что в будущем любые изменения также должны быть сделаны в двух местах. Там, конечно, есть боль, но я действительно думаю, что вы будете лучше работать с «нормальным» .NET.

3 голосов
/ 24 марта 2009

Как отметил Джон: J # довольно мертв.

Выполнение вашего (нормального) кода Java в .NET с использованием IKVM может быть альтернативой, хотя бы.

...