2009-01-13 10 views
46

Dado un conjunto de archivos de código fuente de Java, ¿cómo puedo compilarlos en uno o más archivos de JavaScript que se pueden usar con JavaScript hecho a mano?Cómo realizar una compilación cruzada del código fuente de Java a JavaScript?

GWT es una opción, pero cada ejemplo que he visto hasta ahora está dirigido a la construcción de sitios web sofisticados. El caso de uso simple de simplemente convertir código fuente de Java a Javascript que se puede usar junto con JavaScript manual hasn't been well-documented.

Comencé un thread on the GWT mailing list sobre este tema, pero las opiniones parecen ser mixtas sobre si esto es incluso factible.

Una persona dio un consejo muy útil, que fue para verificar GWT-Exporter. El problema es que ni el código fuente ni la documentación están disponibles, aunque hay this y this.

edición: código fuente GWT-exportador es here

También he visto Java2Script. Pero nuevamente, no pude encontrar ejemplos de cómo resolver mi caso de uso simple.

¿Cuál es el mejor enfoque para este problema? ¿Hay algo mejor que me estoy perdiendo?

+0

Esta pregunta trata un tema muy similar: compilar las bibliotecas de Java a JavaScript usando GWT. http://stackoverflow.com/questions/3125556/gwt-to-create-utility-javascript-library –

+1

Pregunta muy completa. Hiciste un gran trabajo expresando lo que ya habías explorado. Bien hecho. – Spina

+0

Puede intentar usar Scala-js https://github.com/lampepfl/scala-js para su proyecto java - interoperabilidad java/scala http://www.scala-lang.org/old/faq/4) –

Respuesta

9

Cuando utiliza GWT, básicamente está convirtiendo la parte de la IU en Javascript (y se supone que utiliza los widgets de UI proporcionados cuando escribe su Java). Solo algunas de las bibliotecas de Java son accesibles dentro de Javascript. Normalmente, en una aplicación GWT todo lo que hace un uso intensivo de las bibliotecas Java se ejecuta en el servidor y se conecta al Javascript como AJAX (que GWT maneja para usted). Entonces, GWT no necesariamente convierte su aplicación completa en Javascript (aunque sí puede hacerlo si está dispuesto a limitar el uso de las bibliotecas de Java y algunas funcionalidades).

En cualquier caso, si este enfoque (invocar a Java ejecutándose en un servidor desde Javascript) le atrae, una buena opción es DWR, que básicamente permite que su Javascript invoque directamente métodos en clases Java que se ejecutan en el servidor (sin tener que crear un servicio web u otro frontend). No es lo que preguntaste, lo sé.

Más relevante, parece que hay un código fuente para sample app demonstrating the use of gwt-exporter.

+0

This sería para una biblioteca java no-gui bastante pequeña. No había visto DWR, que parece que podría ser muy útil para proyectos más grandes. I Ni siquiera vi el directorio fuente para el proyecto gwt-exporter, gracias por señalarlo. Eso parece prometedor. –

+2

El enlace gwt-exporter está muerto –

+0

Aquí hay un nuevo enlace a la aplicación de muestra: http://code.google.com/p/gwt-exporter/source/browse/trunk/samples/src/main/java/exporterdemo/public /ExporterDemo.html –

1

dado un conjunto de archivos de código fuente de Java, ¿cómo puedo compilar en una o más archivos JavaScript que se pueden utilizar con hechos a mano JavaScript?

No existe una correlación directa entre las funciones integradas de Java API y Java, y las de JavaScript. Entonces cualquier intento de crear un "convertidor" va a estar incompleto. Como ejemplo fundamental, las clases de Java no tienen una expresión idiomática de JavaScript directa.

No se puede saber si una herramienta de conversión incompleta funcionará para su caso de uso sin el código fuente.


Dicho esto, mi sugerencia para resolver su problema sería primer intento de utilizar GWT: establecer un proyecto de demostración, la caída en la fuente de su biblioteca y llamarlo desde el lado JavaScript y ver qué salidas GWT en su archivo .js También vale la pena echarle un vistazo a algunas de las otras herramientas sugeridas por otros carteles aquí.

Si eso es fructífero y te hace una parte del camino, genial.

A partir de ahí, necesitará/querrá hacer el resto de la conversión a mano. Después de todo, suponiendo que desea que el código funcione realmente correctamente, una revisión manual definitivamente estaría en orden. Algunas pruebas unitarias que se conviertan junto con él serían ideales también.

No indica qué tan grande es la fuente de su proyecto, pero si es pequeño (digamos menos de mil líneas de código), incluso una conversión completa a mano no debería ser extremadamente difícil. Si es mucho más grande que eso, le sugiero que revise si realmente lo quiere como código JavaScript de todos modos.

3

Aquí hay otras dos opciones, cosas que se deben analizar y una tercera opción que no se puede convertir, solo vivir juntos.

  1. Java2Javascript

he estado que quiera probar esto - Parece más cerca de lo que se ha preguntado. Citando a la página web:..

un Eclipse Java para JavaScript complemento compilador y una implementación de JavaScript versión de Eclipse Standard Widget Toolkit (SWT) con otros servicios públicos comunes, como java.lang y java.util * * . Puede convertir su Rich Client Platform (RCP) SWT-based en Rich Internet Application (RIA) mediante Java2Script Pacemaker.

Java limitado en la experiencia Javascript - Se necesitaría al puerto sus dependencias necesarias o encontrar alternativas a través de herramientas como jQuery, etc.

  1. DukeScript

Al ver DukeScript, compila parte de Javascript y llama Java desde el Javascript del navegador. Parece más o menos un enfoque híbrido, por lo que puede utilizar la riqueza de Java de las bibliotecas de Javascript. Voy a caer en una política de seguridad del navegador para Java.

Una experiencia de Javascript más completa en Java aprovechando el tiempo de ejecución de Java. Si quisiera eso fuera del entorno del navegador, usaría Javascript en Java.

  1. Nashhorn

considerar esto como un ejemplo de la utilización de los recursos de Java como base para Javascript: Nashorn and JavaFX, como un ejemplo para una rica Javascript operado cliente. De todos modos, con un motor de Javascript dentro de Java no es necesario traducir tanto entre una VM de JavaScript a código de objeto a una Java-VM.

+0

Tu vista de DukeScript no es del todo correcto. También puede ejecutar aplicaciones DukeScript en un navegador utilizando TeaVM o bck2brwsr como VM. – monacotoni

+0

Tengo entendido que necesito un "plugin de V/M" de alguna descripción. Esa opción no es "hacer javascript", está llamando Java desde Javascript. – will

+1

bck2brwsr y TeaVM no son * plugins *. Su propósito principal es ejecutar el código de Java en el navegador sin necesidad de un complemento. Por lo tanto, no "caerá en una política de seguridad del navegador para Java." – monacotoni

7

Si bien la pregunta es acerca de cómo compilar las fuentes de Java en JavaScript, creo que vale la pena mencionar que hay TeaVM que compila el bytecode de Java a JavaScript. Nunca lo he intentado, pero parece muy prometedor.

8

No estoy seguro de si se ajusta a su caso de uso, pero si acepta eliminar las API de Java y usar API JavaScript de Java, puede usar JSweet, un transpondedor de Java a JavaScript construido en la parte superior de TypeScript.Le da acceso a cientos de API de JavaScript bien tipadas (DOM, jQuery, guión bajo, angularjs, etc.). Genera código JavaScript y puede mezclarlo con JavaScript heredado y código TypeScript.

Nota: JSweet no funcionará para el código heredado de Java y las API heredadas de Java, pero su caso de uso no mencionó la reutilización del código heredado.

[ACTUALIZACIÓN] Desde la versión 1.1, JSweet ahora también es compatible con algunas API de Java, como Colecciones (java.util). Por lo tanto, es posible reutilizar el código heredado de Java hasta cierto punto. También es bastante sencillo agregar su propio soporte para API de Java.

+0

esto parece demasiado estricto. Dice que no puede encontrar la clase X, Y, Z. ¿Hay alguna forma de hacerlo menos estricto? Solo necesito una aproximación de TS incluso, donde puedo arreglar cualquier error que haya a mano. Solo quiero algo que pueda apuntar a una estructura de paquete, y luego escupe un equivalente de TS. ¿Puede jsweet hacer esto? –

+0

Espero que http://stackoverflow.com/questions/39253788/installed-jsweet-now-what proporcione suficientes detalles sobre ese asunto. –

3

No del todo en el tema, pero Kotlin es un lenguaje 100% compatible con Java que puede compilar en JavaScript.

IntelliJ IDEA puede convertir automáticamente Java a Kotlin y compilarlo para ejecutar en Node o en el navegador.

+2

Kotlin tiene ~ 1MB de tiempo de ejecución. – garkin

+3

Esto solo funciona si el código está escrito al 100% en Kotlin ya que Kotlin no puede compilar a Javascript si está utilizando bibliotecas de Java. – Tiago

Cuestiones relacionadas