Подтвердить что ты не робот

Как перекрещивать исходный код Java с JavaScript?

Учитывая набор файлов исходного кода Java, как я могу скомпилировать их в один или несколько файлов JavaScript, которые можно использовать с JavaScript, созданным вручную?

GWT - один из вариантов, но каждый пример, который я видел до сих пор, направлен на создание модных веб-сайтов. Простой вариант простого преобразования источника Java в Javascript, который можно использовать вместе с JavaScript с ручной обработкой не был хорошо документирован.

Я начал тему в списке рассылки GWT по этому вопросу, но мнения, кажется, неоднозначны относительно того, насколько это возможно.

Один человек дал очень полезный совет, который должен был проверить GWT-Exporter. Проблема заключается в том, что ни исходный код, ни документация не доступны, хотя там this и это.

edit: исходный код GWT-Exporter здесь

Я также видел Java2Script. Но опять же, я не смог найти примеры того, как решить мой простой случай использования.

Какой лучший подход к этой проблеме? Есть ли что-то лучшее, что мне не хватает?

4b9b3361

Ответ 1

Когда вы используете GWT, вы в основном конвертируете часть пользовательского интерфейса в Javascript (и предполагается, что вы используете виджеты пользовательского интерфейса, предоставленные при написании вашей Java). Только некоторые из библиотек Java доступны в Javascript. Как правило, в приложении GWT все, что сильно использует библиотеки Java, будет работать на стороне сервера и подключаться к Javascript как AJAX (который GWT обрабатывает для вас). Таким образом, GWT не обязательно превращает ваше полное приложение в Javascript (хотя он может, если вы хотите ограничить использование Java-библиотек и некоторых функций).

Во всяком случае, если этот подход (обращение к Java, работающий на сервере из Javascript) обращается к вам, один хороший вариант DWR, что в основном позволяет вашему Javascript напрямую вызывать методы в Java-классах, запущенных на сервере (без необходимости создания веб-службы или другого интерфейса). Не то, что вы спросили, я знаю.

Более того, похоже, что исходный код для пример приложения демонстрирует использование gwt-exportorter.

Ответ 2

Я не уверен, соответствует ли это вашему прецеденту, но если вы согласны отказаться от API Java и использовать JavaScript API от Java, вы можете использовать JSweet, транспилятор Java для JavaScript, построенный в верхней части TypeScript. Это дает вам доступ к сотням хорошо типизированных JavaScript API (DOM, jQuery, underscore, angularjs и т.д.). Он генерирует код JavaScript, и вы можете смешивать его с устаревшим кодом JavaScript и TypeScript.

Примечание. JSweet не будет работать с устаревшим кодом Java и устаревшими API-интерфейсами Java, но в вашем случае использования не упоминалось повторное использование устаревшего кода.

[UPDATE] Начиная с версии 1.1, JSweet теперь также поддерживает некоторые Java-API, такие как Collections (java.util). Таким образом, в некоторой степени можно повторно использовать устаревший Java-код. Также довольно просто добавить свою собственную поддержку Java API.

Ответ 3

Пока речь идет о компиляции Java-источников на JavaScript, я думаю, стоит упомянуть, что есть TeaVM который компилирует байт-код Java в JavaScript. Я никогда не пробовал, но кажется очень многообещающим.

Ответ 4

Здесь два других варианта, вещи, которые нужно посмотреть, и третий вариант, не конвертирующий, просто живу вместе.

Я хочу попробовать это - Выглядит ближе к тому, что было задано. Цитирование веб-страницы:

Плагин компиляции Java Eclipse Java для JavaScript и реализация версии JavaScript Eclipse Standard Widget Toolkit (SWT) с другими распространенными утилитами, такими как java.lang. * и java.util. *. Вы можете конвертировать вашу платформу Rich Client Platform (RCP) на основе SWT в Rich Internet Application (RIA) с помощью Java2Script Pacemaker.

Ограниченная Java в Javascript - вам нужно будет переносить необходимые зависимости или находить альтернативы с помощью таких инструментов, как jQuery и т.д.

  1. DukeScript

Поскольку я рассматриваю DukeScript, он компилирует некоторый внешний Javascript и вызывает Java позади, из браузера Javascript. Это кажется более или менее гибридным подходом, поэтому вы можете использовать богатство библиотек Java из Javascript. Я испортил бы политику безопасности браузера для Java.

Более полный Javascript на Java, использующий Java-runtime. Если бы я хотел, чтобы за пределами среды браузера я использовал Javascript на Java.

  1. Nashhorn

Рассмотрите это как пример использования ресурсов Java в качестве основы для Javascript: Nashorn и JavaFX, в качестве примера для богатого Javascript-клиента. В любом случае с движком Javascript внутри Java вам не нужно много переводить между Javascript-VM и объектным кодом на Java-VM.

Ответ 5

Не полностью по теме, но Kotlin - это 100% -ный Java-совместимый язык, который может скомпилировать JavaScript.

IntelliJ IDEA может автоматически конвертировать Java в Kotlin и компилировать его для запуска на Node или в браузере.

Ответ 6

Учитывая набор файлов исходного кода Java, как я могу скомпилировать их в один или более файлов JavaScript, которые могут использоваться с ручными инструментами JavaScript?

Прямая корреляция между встроенным Java API и языковыми функциями Java, а также JavaScript. Поэтому любая попытка создания "конвертера" будет неполной. В качестве фундаментального примера классы Java не имеют прямой идиомы JavaScript.

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


Тем не менее, мое предложение решить вашу проблему было бы сначала попытаться использовать GWT: создать демонстрационный проект, источник вашей библиотеки и вызовите ее со стороны JavaScript и посмотрите, что GWT выводит в нее файл .js. Некоторые из других инструментов, предлагаемых другими плакатами здесь, также заслуживают проверки.

Если это является плодотворным и делает вас частью пути, отлично.

Оттуда вам понадобится/захочет выполнить остаток конверсии вручную. В конце концов, если вы хотите, чтобы код действительно функционировал корректно, ручная проверка определенно будет в порядке. Некоторые единичные тесты, которые будут преобразованы вместе с ним, также были бы идеальными.

Вы не указываете, насколько велик источник вашего проекта, но если он маленький (пусть меньше тысячи строк кода), даже полное преобразование вручную не должно быть чрезвычайно сложным. Если бы это было намного больше, я бы предложил рассмотреть, действительно ли вы хотите, чтобы это как код JavaScript.