JSweet: транспилятор Java в JavaScript
JSweet использует TypeScript для написания многофункциональных и быстро реагирующих веб-приложений на Java с помощью библиотек и фреймворков JavaScript. С помощью JSweet программы Java транспилируются (компилируются из исходного кода) в TypeScript и JavaScript для запуска в браузерах, мобильных веб-представлениях или в Node.js.
- JSweet безопасен и надежен. Он обеспечивает веб-приложениям проверку типов и генерирует программы JavaScript с полной проверкой типов. Он основан на Java-компиляторе Oracle (javac) и TypeScript от Microsoft (tsc).
- JSweet позволяет вам использовать вашу любимую библиотеку JS (JSweet+Angular2, JSweet+threejs, IONIC/Cordova, ...).
- JSweet обеспечивает совместное использование кода между серверным Java и клиентским JavaScript. JSweet предоставляет реализации основных библиотек Java для совместного использования кода и миграции устаревших Java.
- JSweet — быстрый, легкий и полностью совместимый с JavaScript. Сгенерированный код представляет собой обычный код JavaScript, который не требует дополнительных затрат по сравнению с JavaScript и может напрямую взаимодействовать с существующими программами и библиотеками JavaScript.
Как это работает? JSweet зависит от хорошо типизированных описаний API-интерфейсов JavaScript, так называемых «конфеток», большинство из которых автоматически генерируются из файлов определений TypeScript. Эти описания API в Java можно рассматривать как заголовки (аналогично файлам заголовков *.h в C) для соединения библиотек JavaSript с Java. Существует несколько источников конфет для существующих библиотек, и вы можете легко создать конфету для любой библиотеки (см. подробнее).
С JSweet вы пользуетесь всеми преимуществами инструментов Java (IDE, Maven и т. д.) для программирования реальных приложений JavaScript с использованием новейших библиотек JavaScript.
Java -> TypeScript -> JavaScript
Вот первый пример того, что вы получаете, используя JSweet. Рассмотрим эту простую программу Java:
package org . jsweet ;
import static jsweet . dom . Globals .*;
/**
* This is a very simple example that just shows an alert.
*/
public class HelloWorld {
public static void main ( String [] args ) {
alert ( "Hi there!" );
}
}
Транспиляция с помощью JSweet дает следующую программу TypeScript:
namespace org . jsweet {
/**
* This is a very simple example that just shows an alert.
*/
export class HelloWorld {
public static main ( args : string [ ] ) {
alert ( "Hi there!" ) ;
}
}
}
org . jsweet . HelloWorld . main ( null ) ;
Что, в свою очередь, создает следующий вывод JavaScript:
var org ;
( function ( org ) {
var jsweet ;
( function ( jsweet ) {
/**
* This is a very simple example that just shows an alert.
*/
var HelloWorld = ( function ( ) {
function HelloWorld ( ) {
}
HelloWorld . main = function ( args ) {
alert ( "Hi there!" ) ;
} ;
return HelloWorld ;
} ( ) ) ;
jsweet . HelloWorld = HelloWorld ;
} ) ( jsweet = org . jsweet || ( org . jsweet = { } ) ) ;
} ) ( org || ( org = { } ) ) ;
org . jsweet . HelloWorld . main ( null ) ;
Подробнее о живой песочнице.
Функции
- Полное сопоставление синтаксиса между Java и TypeScript, включая классы, интерфейсы, функциональные типы, типы объединения, типы кортежей, типы объектов, типы строк и т. д.
- Расширенная поддержка конструкций и семантики Java, добавленная начиная с версии 1.1.0 (внутренние классы, анонимные классы, конечные поля, перегрузка методов, оператор экземпляра, статические инициализаторы,...).
- Более 1000 библиотек JavaScript , фреймворков и плагинов для написания веб-приложений и мобильных HTML5-приложений (JQuery, Underscore, Angular, Backbone, Cordova, Node.js и многие другие).
- Репозиторий Maven, содержащий все доступные библиотеки в артефактах Maven (также известных как конфеты).
- Поддержка базовых API Java в виде конфеты J4TS (разветвленной от эмуляции JRE GWT).
- Плагин Eclipse для простой установки и использования.
- Плагин Maven для использования JSweet из любой другой IDE или из командной строки.
- Плагин Gradle для интеграции JSweet с проектами на основе Gradle.
- Режим отладки, позволяющий отлаживать код Java в вашем любимом браузере.
- Набор хороших примеров HTML5 для WEB/Mobile, чтобы начать работу и привыкнуть к JSweet и наиболее распространенным API JavaScript (еще больше примеров в разделе «Примеры»).
- Поддержка пакетов для максимально простого запуска сгенерированных программ.
- Поддержка модулей JavaScript (commonjs, amd, umd). Программы JSweet могут запускаться в браузере или в Node.js.
- Поддержка различных целевых версий EcmaScript (от ES3 до ES6).
- Поддержка идиомы async/await
- ...
Для получения более подробной информации перейдите к языковым спецификациям (PDF).
Начиная
- Шаг 1. Установите (или проверьте, что вы установили) Git, Node.js и Maven (в вашем пути должны быть команды
git
, node
, npm
и mvn
). - Шаг 2. Клонируйте проект jsweet-quickstart с Github:
$ git clone https://github.com/cincheo/jsweet-quickstart.git
- Шаг 3. Запустите транспилятор для генерации кода JavaScript:
$ cd jsweet-quickstart
$ mvn generate-sources
- Шаг 4. Проверьте результат в своем браузере:
$ firefox webapp/index.html
- Шаг 5: Отредактируйте проект и начните программировать:
- Ознакомьтесь с примерами, чтобы увидеть различные варианты использования.
- Получите доступ к сотням библиотек (конфет)
- Обратитесь к спецификациям языка, чтобы узнать больше о программировании с помощью JSweet.
- Пользователи Eclipse: установите плагин Eclipse, чтобы получать встроенные отчеты об ошибках, сборку при сохранении и простой пользовательский интерфейс настройки.
Дополнительная информация на http://www.jsweet.org.
Примеры
- Простые примеры, иллюстрирующие использование различных фреймворков на Java (jQuery, Underscore, Backbone, AngularJS, Knockout): https://github.com/cincheo/jsweet-examples
- Простые примеры, иллюстрирующие использование платформы Threejs в Java: https://github.com/cincheo/jsweet-examples-threejs)
- Node.js + Socket.IO + AngularJS: https://github.com/lgrignon/jsweet-node-example
- Несколько простых примеров для начала работы с React.js: https://github.com/cincheo/jsweet-examples-react.
- Пример сервера JSweet JAX-RS (как совместно использовать модель Java между клиентом и сервером): https://github.com/lgrignon/jsweet-jaxrs-server-example
- Пример JSweet Cordova/Polymer: https://github.com/lgrignon/jsweet-cordova-polymer-example
- Пример JSweet Cordova/Ionic: https://github.com/lgrignon/jsweet-cordova-ionic-example
- Пример JSweet Angular 2: https://github.com/cincheo/jsweet-angular2-quickstart
- JSweet Angular 2 + PrimeNG: https://github.com/cincheo/jsweet-primeng-quickstart
Подпроекты
Этот репозиторий организован в подпроекты. Каждый подпроект имеет свой собственный процесс сборки.
- Транспилятор JSweet: компилятор Java в TypeScript/JavaScript.
- JSweet core candy: основные API (язык JavaScript, JavaScript DOM и языковые утилиты JSweet).
- Среда выполнения JDK: ответвление эмуляции JRE GWT для реализации основных API-интерфейсов JDK в JSweet/TypeScript/JavaScript.
- Генератор конфет JSweet: инструмент для создания API-интерфейсов Java из файлов определений TypeScript и их упаковки в виде конфет JSweet.
- Документация JSweet: Документация JSweet.
Кроме того, некоторые инструменты для JSweet доступны во внешних репозиториях.
- Плагин Maven
- Плагин Gradle
- Плагин Eclipse
Как построить
Пожалуйста, проверьте каждый файл README подпроекта.
Содействие
JSweet использует Git Flow. Вы можете форкнуть этот репозиторий. Ветка по умолчанию находится в стадии разработки. Пожалуйста, используйте git flow feature start myAwesomeFeature
, чтобы начать работу над чем-то замечательным :) Когда вы закончите, вы можете отправить обычный запрос на извлечение GitHub.
Лицензия
Пожалуйста, прочтите файл ЛИЦЕНЗИИ.