Gracias por sus respuestas. Aquí está el resumen de todas las respuestas relevantes y mi propia investigación.
Cambiar el código de bytes: La Retros
Esto se hace por el "retro"-tools: Retrotranslator, Retroweaver y JBossRetro. Retrotranslator parece ser el más maduro y activo de la herramienta. Estas herramientas escanean todas las clases y cambian el bytecode para eliminar las características de Java 5 y 6. Se admiten muchas características de Java5, algunas mediante el uso de bibliotecas de backport de terceros. Esta opción es la más popular y hay algunos comentarios positivos de los usuarios. Los experimentos mostraron que está funcionando como esperado. Vea una breve descripción en developerworks.
Pro: Puede desarrollar completamente en Java 5, construir módulos y todo tipo de JAR. Al final, simplemente transforma todas las clases a Java 1.4 y empaqueta su EAR. Esto se hace fácilmente con la integración Maven de Retrotranslator (org.codehaus.mojo:retrotranslator-maven-plugin
).
Con: Los entornos conservadores no permiten que se implemente el bytecode modificado. El resultado del retroceso no es visible para ningún codificador y no puede aprobarse. El segundo problema es el miedo: puede haber algún problema críptico de producción y el retro-código es otro paso que podría culparse por eso. Los vendedores del servidor de aplicaciones pueden rechazar la ayuda debido a bytecode modificado. Entonces nadie quiere asumir la responsabilidad de usarlo en la producción. Como esto es más un problema policial que técnico , entonces no veo solución. Le ha ocurrido a nosotros, por lo que estaba buscando otras opciones :-(
Compilación Java5 a Java 1.4:. Jsr14
Hay una opción no compatible, javac -source 1.5 and -target jsr14
que compila la fuente Java5 a Java 1.4 válido el código de bytes más características como varargs o extendidas para el bucle son traducidas por el compilador de todos modos. los genéricos y anotaciones son despojados. enumeraciones no son compatibles y no sé sobre autoboxing, como los métodos valueOf
se introdujeron en su mayoría en Java5.
con : Solo se traduce el código de bytes, el uso de la biblioteca no se modifica. Por lo tanto, debe tener cuidado de no t utilizar API específicas de Java5 (pero podría usar Backports). Además, tiene que compilar todos los módulos al mismo tiempo, porque para el tiempo de desarrollo, usted desea de manera viable código Java5 con información genérica y de anotación. Así que tienes que construir todo el proyecto desde cero para la producción de Java 1.4.
Cambiar la fuente de nuevo a Java 1.4: Declawer
Como respondió en un related question, hay Declawer, una extensión del compilador, que trabaja para los genéricos y varargs, pero no para la mejora de bucle o autoboxing. La fuente generada "es un poco cobarde, pero no está mal".
Pro: La fuente generada está disponible y puede ser revisada. En el peor de los casos, se pueden hacer arreglos en esta fuente. No hay "magia", porque la fuente es Java válida. Algunas personas incluso usan JAD (descompilador Java) para obtener la fuente Java 1.4 nuevamente. La salida de Jad legible es legible si compila con información de depuración y no utiliza clases internas.
Con: Similar a -target jsr14
, necesita un paso adicional en la implementación. Los mismos problemas con las bibliotecas, también.
Cambio de Fuente de nuevo a Java 1.4: con la mano
Varias respuestas sugieren hacerlo a mano. Para un proceso de compilación automático y repetitivo, esto por supuesto no es útil, pero para cambios de una sola vez es razonable. Simplemente automatice lo que es posible. Tal vez consulte Antlr para crear una herramienta de conversión propia.
portado Bibliotecas:
El problema es, que también viene Java5 nuevas bibliotecas, que no están disponibles en los JRE mayores, ver related question. Afortunadamente hay varias bibliotecas de backported que le dan algunas funcionalidades de Java5, pero no pueden simular características de lenguaje, como los genéricos.
Emulating Java5 cuenta en Java 1.4 código:
estaba pensando en algunas cosas que usted puede hacer para hacer su vida más fácil y aún así permanecer con Java 1.4. Las características más importantes son colecciones typesafe, He aquí algunas ideas:
- En lugar de utilizar los genéricos puede crear sus propios recipientes typesafe con alguna plantilla.
- Agregue un iterador seguro (que ya no es iterador).
- Agregue
asList
métodos que permiten 1,2,...,n
argumentos y una matriz de ellos (para simular varargs).
- Los métodos para varargs (convertir
1,...,n
argumentos en matrices) y valueOf
se pueden poner en alguna clase de ayuda.
para ser realmente quisquilloso ... nunca hubo un Java 4, fue Java 2 versión 1.4. –
Sí, porque los nombres de marketing de Sun son lógicos. –
Gracias por editar las etiquetas. Busqué SO, pero no encontré las preguntas relacionadas: - http://stackoverflow.com/questions/603828/java-5-to-java-1-4-source-code-backporting-tool - http: // stackoverflow.com/questions/547872/converting-java-1-5-source-into-1-1-source - http://stackoverflow.com/questions/17993/easy-way-to-backport-java-6 -code-to-java-5 –