¿Hay alguna forma de convertir Groovy a Java automáticamente?
plugins code-translation (8)
Cambiaríamos alrededor de 1000 Groovy Classes a Java 8.
- automáticamente: creo que es posible en combinación con pasos manuales
Posibles pasos para la migración
Variables de def: reemplazar manualmente con el nombre de clase correcto en el IDE
def Methodes: reemplace manualmente con el nombre de clase correcto como Valor de retorno en el IDE
Renombrar archivo: Reemplazar automáticamente todos los archivos .groovy por archivos .java (Java 8)
clousures: reemplazar manualmente con Java 8 Lambdas y Java 8 Streams
Groovy overritten Methodes: reemplazar manualmente con los nuevos Jdk Klasses de Java, es decir, New File io, New Date API o incluir las bibliotecas de Apache
Usa tus pruebas unitarias para controlar tu refactorización.
PD: Nosotros usw. Eclipse con el complemento Groovy.
Saludos Roebi
Heredé cantidades significativas del código de Groovy, y me ha resultado difícil de mantener por varias razones:
- Muy a menudo es difícil decir cuál es el tipo de una variable.
- Corolario: es fácil modificar una variable con un tipo diferente y no ser consciente de ello.
- Se descubrirán muchos errores hasta el tiempo de ejecución (lo cual es aterrador si las pruebas de su unidad no cubren prácticamente todo).
- El tipo de los parámetros es básicamente ignorado.
- El IDE que estoy usando (STS Pro) es útil, pero muy atrás de Java. Por ejemplo, la refactorización simplemente no está disponible.
- Las sugerencias están disponibles algunas veces, otras, no.
Aunque aprecio la compacidad del lenguaje, el mantenimiento ha sido difícil y engorroso.
Intenté convertir manualmente algunas piezas en Java, ha sido un dolor. ¿Conoce alguna herramienta o complemento que ayude con esta conversión?
Mi mejor consejo es escribir muchas pruebas unitarias .
Este consejo es válido para la mayoría de los lenguajes dinámicos, ya que obtiene menos de una "red de seguridad" de la comprobación de tipo estático por parte del compilador. Deberá agregar pruebas para verificar que los valores de entrada y salida tengan el tipo correcto, etc.
Creo que esto resolverá la mayoría de tus problemas.
Probablemente no es la respuesta que desea escuchar, pero me centraría en estar más cómodo con Groovy en lugar de tratar de convertir el código a Java. Hay muchas cosas que puedes hacer en Groovy que simplemente no se pueden traducir bien a Java (como cierres ). Cualquier conversión automatizada a Java hará que el código sea mucho menos legible y más difícil de entender.
Si no puede persuadirse de que se quede con Groovy, y DEBE migrar a Java, su mejor opción será hacerlo a mano.
tiene una pregunta hace un año. Después de uno o dos meses de euforia groovy, fue un cambio en el mundo real débil. Incluso GReclipse 2.0 no causa menos dolor, el código se vuelve inmanejable y doloroso. Respuesta corta a su pregunta - no. No hay un buen instrumento para hacer esto. GSql soy reemplazar con Spring JdbcTemplate, Cierres con devoluciones de llamada. Todo esto necesita una decisión manual de reemplazar la estrategia, así que si quieres obtener un buen código, debes hacerlo int manauly. De lo contrario, puedes usar algunos descompiladores de Java, pero creo que no es lo que realmente quieres.
Encontré una solución alternativa usando Groovy ++. Tiene casi todas las ventajas de Groovy, pero con rendimiento y tipeo fuerte de Java. Además, está basado en Groovy, por lo que aparentemente solo necesita agregar un archivo jar y la anotación "@Typed" en la parte superior del código.
Además, agrega nuevas características, como "GrUnit", y permite mezclar tipos dinámicos y estáticos, lo que espero permita la creación de DSL. Por lo tanto, permite mezclarlo con el código Groovy existente y usarlo con Grails.
El proyecto parece ser joven, pero realmente prometedor. Ya estoy probando las aguas y comprobando qué tan lejos puedo tomarlo.
Por lo tanto, esta respuesta en realidad no dice cómo convertir Groovy a Java, pero puede obtener algo aún mejor: los beneficios de ambos mundos plus y tercer mundo opcional - sin juego de palabras :-) - tipado estático y rendimiento.
IntelliJ IDEA tiene un soporte bastante decente para refactorizar el código groovy. También tiene un convertidor de código fuente de Groovy -> Java. La mayoría de las veces genera código que no se compila, pero puede ayudarlo a comenzar con el proceso de conversión del código. Código Groovy:
class HelloWorld {
def name
def greet() { "Hello ${name}" }
int add(int a, int b) {
return a+b;
}
}
Código Java convertido:
public class HelloWorld {
public GString greet() {
return "Hello " + String.valueOf(name);
}
public int add(int a, int b) {
return a + b;
}
public Object getName() {
return name;
}
public void setName(Object name) {
this.name = name;
}
private Object name;
}
Los lenguajes Groovy y Java se compilan en el mismo bytecode (Java Platform Bytecode). Así que simplemente (a) compila tu archivo .groovy en un archivo .class; (b) utilice un descompilador como JDGUI para descompilar su archivo .class en un archivo .java.
para alguien que tiene una pregunta similar, puede echar un vistazo a GMavenPlus