Учитывая набор файлов исходного кода Java, как я могу скомпилировать их в один или несколько файлов JavaScript, которые можно использовать с созданным вручную JavaScript?
Хотя существует множество решений для преобразования приложений Java в Javascript , вас интересует решение, в котором новый код JavaScript может взаимодействовать с результирующим кодом. Это обновление (с 2018 года) других ответов.
Существуют разные типы инструментов. Например, вы можете найти инструменты, которые позволят вам (1) преобразовать код Java в код JavaScript; (2) конвертировать байт-код в javascript, asm.js или веб-сборку; (3) выполнять приложения Java непосредственно в браузере и (4) создавать решения, которые сочетают в себе Java и JavaScript. Вы должны выбрать решение для использования в зависимости от ваших требований.
Преобразование исходного кода Java в Javascript
Некоторые решения берут исходный код java и создают эквивалентную версию javascript. Обычно эти решения преобразуют Java в Javascript, но не поддерживают все поведения и библиотеки среды выполнения Java. Полученный код может не поддерживать некоторые стандартные библиотеки Java. Как правило, они используются для создания HTML-приложения с использованием Java, но не для переноса кода. Плюсы: Полученное решение может содержать очень маленькие файлы. Вы можете использовать его для повторного использования ваших собственных классов бизнес-логики без учета графического интерфейса или библиотек, специфичных для платформы. Минусы: возможно, что вы не можете использовать некоторые функциональные возможности платформы Java. Требуется доступ к исходному коду.
- JSweet преобразует Java в JavaScript. Он включает в себя привязки API для более 1000 библиотек JavaScript. Вы можете написать код Java, который использует эти библиотеки.
- j2s , это компилятор, используемый платформой Eclipse RAP для перевода java-кода в javascript. Он используется для преобразования виджетов SWT (GUI) в javascript и HTML. Он не поддерживает все стандартные библиотеки Java
Преобразование байт-кода Javascript в javascript
Эти решения берут скомпилированный код Java (файлы .class) и создают эквивалентный код в javascript, asm.js или веб-сборке. Учитывая, что код Java может зависеть от стандартных библиотек Java (т. Е. JRE), эти решения обычно включают в себя портированные и предварительно скомпилированные библиотеки. Плюсы: вам не нужно ничего менять в своем коде. Вам также не нужен исходный код. Минусы: Полученное решение может потребовать загрузки большого количества файлов.
- Bck2Brwsr , виртуальная машина Java, которая может заранее скомпилировать байт-код java в javascript. Он создает файл javascript для каждого файла .jar.
- Вы можете использовать объект
vm
javascript для загрузки класса в javascript и выполнения статических методов (используя vm.loadClass(.., function(class){..}}
). В документации есть пример для плагина gradle и задачи maven .
- TeaVM - еще одна виртуальная машина Java, которая может заранее преобразовать код в javascript. В отличие от Bck2Brwsr, он поддерживает потоки, создает один файл для всех ваших классов и обеспечивает лучшую поддержку отладки.
- DukeScript , перенос Java-кода и байт-кода в JavaScript с использованием Bck2Brwsr или TeaVM.
- Dragome , перенос байт-кода Java в JavaScript.
- CheerpJ (коммерческий продукт) может запускать полные Java-приложения с использованием Swing и AWT. Он обеспечивает очень полную среду javascript, которая поддерживает функциональные возможности операционной системы, потоков и сети.
- Предоставляет полный API времени выполнения . Вы можете запустить метод
main
, используя cheerpjRunMain( <class>, <jar> )
. Вы можете создавать объекты, используя cjNew( <class>, <params>...)
, и вызывать статические методы, используя cjCall( <class>,<method>,<params>...)
. Есть много других методов, которые вы можете рассмотреть.
Запуск Java-кода в Javascript
DoppioJVM - это полная JVM, написанная на Typescript. Плюсы: Он эмулирует множество элементов операционной системы, включая файловые системы, консоли TTY и потоки. Минусы: Учитывая, что это интерпретатор, он может работать медленнее, чем другие решения. (Я не проверял это)
- DoppioJVM - это JVM, написанная на Typescript
- Документация содержит фрагменты кода для загрузки и запуска классов. Вы можете запустить статический метод, используя
jvm.runClass( <class>, [ <args>...], function(response){..})
. Вы можете запустить файл Jar и выполнить множество других задач.
Создание приложений, сочетающих Java и Javascript
Некоторые другие решения предоставляют не только инструменты для компиляции кода, но также фреймворки и решения для создания решений java и javascript. Например, CheerpJ имеет полные версии библиотек Swing и AWT для графических пользовательских интерфейсов, но они могут работать очень медленно. Вы можете заменить пользовательский интерфейс, используя новые версии HTML, которые работают быстрее в браузере. Плюсы: Вы можете повторно использовать существующий код без изменений, в основном некоторые библиотеки и бизнес-логику. Вы можете удалить из своих решений библиотеки, которые неэффективно работают в браузере. Минусы: Если вы хотите продолжать поддерживать версию Java для рабочего стола, вы должны иметь дело с другим кодом для браузера.
- GWT преобразует код Java в javascript, но использует другой набор библиотек для пользовательского интерфейса и обмена данными между клиентом и сервером.
- Dukescript использует инструменты преобразования, упомянутые ранее.
- Он предоставляет библиотеку Knockout4j , которая может легко взаимодействовать с HTM, DOM и дополнительным кодом JavaScript.
- Dragome не только конвертирует Java-код, но и включает средства взаимодействия с HTML / DOM
- HTML / Java API - это проект Apache, который стандартизирует доступ к HTML / DOM / javascript из переданного кода
- Это было пожертвовано Dukescript и другими поставщиками инструментов.
Рекомендация
- Если вы хотите повторно использовать несколько классов, созданных вами, вы можете попробовать JSweet . Вы можете создавать модули javascript (библиотеки), которые можно легко использовать с javascript и typcript.
- Если вы хотите повторно использовать среднюю или большую кодовую базу, использующую несколько библиотек Java, вы можете попробовать CheerpJ , Dukescript или Dragome . Вы можете повторно использовать большие части своего кода и создавать (постепенно) пользовательский интерфейс и взаимодействие между клиентом и сервером, используя технологии, более удобные для браузера.
- Если вы хотите запускать полные Java-приложения без изменений, вы можете попробовать CheerpJ . Он может запускать пользовательские интерфейсы Swing и AWT. Это также обеспечивает бегун апплета .