Проблемы с портированием Java на J#
Вопрос
У меня есть кодовая база среднего размера (25 тыс. строк кода, 25 тыс. строк тестов) в Java, и я хотел бы портировать ее для работы как в CLR, так и в JVM.
Только основной класс и несколько утилит тестирования каким-либо образом имеют дело с файловой системой или ОС.Остальная часть кода широко использует API-интерфейсы общих коллекций: java.util.regex, java.net (но не URL или URLConnection), java.io для кодирования/декодирования кодировки, java.text для нормализации Юникода и org.w3c. dom для манипуляций с XML.
Можно ли скомпилировать большую часть кодовой базы как под J#, так и под Java, а затем портировать остальное?
Если да, то с какими подводными камнями я могу столкнуться?
заранее спасибо, Майк
Решение
Посмотрите IKVM: http://www.ikvm.net/
Он позволяет запускать (специально скомпилированный) Java-код внутри .Net CLR.
Некоторые из моих коллег успешно использовали его с кодовой базой Java, насчитывающей более 1 миллиона строк кода.
Другие советы
Подводные камни:
- Все подобное пугает меня до чертиков.Количество действительно незаметных ошибок, ожидающих своего появления, огромно.
- J# поддерживает только Java 1.1.4 AFAIK – прощайте, дженерики и т. д.
- Visual Studio 2008 не поддерживает J# — по сути, это мертвый проект.
Я подозреваю, что вам на самом деле будет проще переписать его на C# (включая изучение C#, если вы его еще не знаете - это радость).Таким образом, вы также получите более идиоматически .NET-подобную библиотеку, если это актуально:Если вы когда-нибудь захотите, чтобы другой .NET-разработчик использовал ваш код, он, скорее всего, будет гораздо более доволен «чистым» проектом .NET, чем проектом, использующим J#.
Обратной стороной является то, что в дальнейшем любые изменения также придется вносить в двух местах.Здесь, конечно, есть неудобства, но я действительно думаю, что вам будет удобнее использовать «обычный» .NET.
Как заметил Джон:J# довольно мертв.
Запуск вашего (обычного) кода Java в .NET с использованием ИКВМ хотя это может быть альтернативой.