Учитывая набор файлов исходного кода Java, как я могу скомпилировать их в один или несколько файлов JavaScript, которые можно использовать с созданным вручную JavaScript?
GWT - один из вариантов, но каждый пример, который я видел до сих пор, направлен на создание модных веб-сайтов. Простой вариант использования - просто преобразовать исходный код Java в Javascript, который можно использовать вместе с созданным вручную JavaScript не было хорошо задокументировано.
Я начал ветка в списке рассылки GWT по этому поводу, но мнения о том, возможно ли это вообще, разошлись.
Один человек дал очень полезный совет: проверить GWT-Экспортер. Проблема в том, что ни исходный код, ни документация не всегда доступны, хотя есть это и это.
изменить: исходный код GWT-Exporter - здесь
Я также видел Java2Script. Но опять же, я не смог найти примеров того, как решить мой простой вариант использования.
Как лучше всего решить эту проблему? Есть что-то лучшее, что мне не хватает?
Очень обстоятельный вопрос. Вы проделали отличную работу, выразив то, что уже исследовали. Отлично сделано.
Вы можете попробовать использовать Scala-js github.com/lampepfl/scala-js для своего java-проекта - совместимость java / scala scala-lang.org/old/faq/4)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Когда вы используете GWT, вы в основном конвертируете часть пользовательского интерфейса в Javascript (и предполагается, что вы используете виджеты пользовательского интерфейса, предоставленные при написании Java). В Javascript доступны только некоторые библиотеки Java. Обычно в приложении GWT все, что интенсивно использует библиотеки Java, будет работать на стороне сервера и подключаться к Javascript как AJAX (который GWT обрабатывает за вас). Таким образом, GWT не обязательно конвертирует ваше полное приложение в Javascript (хотя может, если вы хотите ограничить использование библиотек Java и некоторых функций).
Во всяком случае, если вам нравится этот подход (вызов Java, работающей на сервере из Javascript), один хороший вариант - DWR, который в основном позволяет вашему Javascript напрямую вызывать методы в классах Java, запущенных на сервере (без необходимости для создания веб-службы или другого интерфейса). Не то, о чем вы спрашивали, я знаю.
Более того, похоже, что есть исходный код для образец приложения, демонстрирующий использование gwt-exporter.
Это было бы для довольно небольшой java-библиотеки без графического интерфейса. Я не видел DWR, который, похоже, может быть очень полезен для больших проектов. Я даже не видел исходный каталог для проекта gwt-exporter - спасибо, что указали на него. Это выглядит многообещающе.
Вот новая ссылка на пример приложения: code.google.com/p/gwt-exporter/source/browse/trunk/samples/s rc /…
Новая ссылка тоже мертва. : /
А вот и новая ссылка: code.google.com/p/gwt-exporter/source/browse/samples/…
Кроме того, вот ссылка на главную страницу проекта gwt-exporter - вероятность ее изменения ниже (пример приложения меняет местоположение, когда они меняют формат своего каталога): code.google.com/p/gwt-exporter
Given a set of Java source code files, how can I compile them into one or more JavaScript files that can be used with hand-crafted JavaScript?
Нет прямой корреляции между встроенными функциями Java API и языка Java и функциями JavaScript. Так что любая попытка создать «конвертер» будет неполной. В качестве основного примера, классы Java не имеют прямой соответствующей идиомы JavaScript.
Невозможно узнать без исходного кода, будет ли работать неполный инструмент преобразования для вашего варианта использования.
Тем не менее, я предлагаю решить вашу проблему, чтобы сначала попытаться использовать GWT: настроить демонстрационный проект, добавить исходный код вашей библиотеки и вызвать его со стороны JavaScript и посмотреть, что GWT выводит в его .js файле. Некоторые из других инструментов, предложенных другими авторами, также определенно стоит попробовать.
Если это окажется плодотворным и поможет вам пройти путь - отлично.
Оттуда вам нужно / вы хотите выполнить оставшуюся часть преобразования вручную. В конце концов, если вы хотите, чтобы код действительно работал правильно, ручная проверка определенно будет уместна. Некоторые модульные тесты, конвертируемые вместе с ним, также были бы идеальными.
Вы не указываете, насколько велик исходный код вашего проекта, но если он небольшой (скажем, менее тысячи строк кода), даже полное преобразование вручную не должно быть чрезвычайно сложным. Если он намного больше, я бы посоветовал проверить, действительно ли вы хотите, чтобы это было как код JavaScript.
Вот два других варианта, на которые стоит обратить внимание, и третий вариант - не преобразовывать, а просто жить вместе.
Я давно хотел попробовать это - похоже на то, о чем просили. Цитирование веб-страницы:
an Eclipse Java to JavaScript compiler plugin and an implementation of JavaScript version of Eclipse Standard Widget Toolkit (SWT) with other common utilities, such as java.lang.* and java.util.*. You can convert your SWT-base Rich Client Platform (RCP) into Rich Internet Application (RIA) by Java2Script Pacemaker.
Ограниченный опыт использования Java в Javascript - вам нужно будет перенести необходимые зависимости или найти альтернативы с помощью таких инструментов, как jQuery и т. д.
Когда я просматриваю DukeScript, он компилирует некоторый интерфейсный Javascript и вызывает Java из Javascript браузера. Это кажется более или менее гибридным подходом, поэтому вы можете использовать богатство библиотек Java из Javascript. Я нарушу политику безопасности браузера для Java.
Более полнофункциональный Javascript на Java с использованием среды выполнения Java. Если бы я хотел этого вне среды браузера, я бы использовал Javascript на Java.
Рассмотрим это как пример использования ресурсов Java в качестве основы для Javascript: Нашорн и JavaFX, как пример для многофункционального клиента, работающего с Javascript. В любом случае с движком Javascript внутри Java вам не нужно переводить между Javascript-VM и объектным кодом на Java-VM.
Ваше мнение о DukeScript не совсем верное. Вы также можете запускать приложения DukeScript в браузере, используя TeaVM или bck2brwsr в качестве виртуальной машины.
Насколько я понимаю, мне нужен «плагин V / M» с некоторым описанием. Этот параметр не «выполняет javascript», а вызывает Java из Javascript.
bck2brwsr и TeaVM не являются плагины. Их основная цель - запускать Java-код в браузере без использования плагина. Так что он не будет «нарушать политику безопасности браузера для Java».
Привет, мне нужно просмотреть DukeScript, раньше DukeScript требовал библиотек Java на целевой машине для работы. Или вам нужно было использовать только ограниченный набор методов. TeaVM похоже на идею. Здесь не указано, какая версия Java и Java API поддерживаются. Означает ли упоминание GWT, что мы используем профиль Java 1.6 прошлого века?
Доступный Java API в браузере действительно ограничен. bck2brwsr имеет два профиля: компактный (hudson.apidesign.org/view/bck2brwsr/job/bck2brwsr.javadoc/…) и мини. Идея похожа на GWT, только предоставляет основные API, которые действительно имеют смысл в клиенте на основе браузера. Если вам нужен полный профиль, вам нужно создать настольное приложение.
Хотя вопрос касается компиляции исходных текстов Java в JavaScript, я думаю, стоит упомянуть, что существует TeaVM, который компилирует байт-код Java в JavaScript. Я никогда не пробовал, но это кажется очень многообещающим.
Я не уверен, подходит ли он вашему варианту использования, но если вы согласны отказаться от Java API и использовать JavaScript API из Java, вы можете использовать JSweet, транспилятор Java в JavaScript, построенный на основе TypeScript. Он дает вам доступ к сотням хорошо типизированных API-интерфейсов JavaScript (DOM, jQuery, подчеркивание, angularjs и т. д.). Он генерирует код JavaScript, и вы можете смешивать его с устаревшим кодом JavaScript и TypeScript.
Примечание. JSweet будет работать с нет для устаревшего кода Java и устаревших API-интерфейсов Java, но в вашем варианте использования не упоминается повторное использование устаревшего кода.
[ОБНОВЛЕНИЕ] Начиная с версии 1.1, JSweet теперь также поддерживает некоторые API Java, такие как Коллекции (java.util). Таким образом, можно до некоторой степени повторно использовать унаследованный код Java. Также довольно просто добавить собственную поддержку API Java.
это кажется слишком строгим. Он говорит, что не может найти класс X, Y, Z. Есть ли способ сделать его менее строгим? Мне просто нужно даже приближение TS, где я могу исправить любые оставшиеся ошибки вручную. Мне просто нужно что-то, что я могу указать на структуру пакета, а затем он выдаст эквивалент TS. Может ли jsweet это сделать?
Я надеюсь, что stackoverflow.com/questions/39253788/installed-jsweet-now-wh в предоставит достаточно подробностей по этому поводу.
Не совсем по теме, но Котлин - это 100% Java-совместимый язык, который может компилироваться в JavaScript.
IntelliJ IDEA может автоматически конвертировать Java в Kotlin и скомпилировать его для работы на Node или в браузере.
Kotlin имеет время выполнения ~ 1 МБ.
Это работает только в том случае, если код на 100% написан на Kotlin, поскольку Kotlin не может компилироваться в Javascript, если вы используете библиотеки Java.
В этом вопросе обсуждается очень похожая тема: компиляция библиотек Java в JavaScript с помощью GWT. stackoverflow.com/questions/3125556/…