2009-06-10 13 views
7

Tengo un proyecto que usa genéricos y algunos bits y piezas de Java 1.5/6. ¿Es posible compilar este código para trabajar en un sistema que ejecuta un JRE 1.4?Compilando código Java escrito para 1.5 para trabajar con 1.4 JRE?

Utilizo una secuencia de comandos ANT build y una tarea javac para compilar la biblioteca. Esto funciona bien mientras que el atributo objetivo es 1.5.

Si cambio el objetivo para ser 1.4 me sale el siguiente error:

generics are not supported in -source 1.4 
(use -source 5 or higher to enable generics) 

Así que añadir un atributo de origen y tratar un valor de 5 y 1,5. Nuevo error:

javac: source release 5 requires target release 1.5 

voy a tener que pasar por todo mi código y cambiar las cosas 1.5 para hacer este trabajo?

+0

Nota 1.4 ha terminado su período de vida útil y 1.5 es la mayor parte de su camino a través. Sin embargo, el soporte "Java for Business" está disponible a un precio. –

Respuesta

7

No he utilizado ninguna de estas soluciones, pero hay

  1. Retroweaver
  2. especificando el no soportado -target jsr14puede trabajo
  3. Retrotranslator
  4. Declawer
  5. JBossRetro

También puede encontrar javac -XD-printflat útil (aunque tenga cuidado de no sobrescribir su fuente original).

+0

El segundo parece funcionar. Ahora para probar que la biblioteca realmente funciona en JRE 1.4 ... –

+1

jsr14 no se va a cortar. Sin soporte enum. Retroweaver por otro lado es genial. –

+0

Gracias, solo estaba al tanto de Retroweaver hasta ahora.La mayoría de esas herramientas indican explícitamente que pueden apuntar a 1.4, pero hasta donde puedo ver, solo Retroweaver también te permite apuntar a 1.2, lo que podría ser necesario para el desarrollo de J2ME. –

0

Los genéricos se implementan por borrado de tipo por lo que deben funcionar antes de que se introduzcan los genéricos. Sin embargo sería incapaz de compilar el código con una versión anterior del compilador (no sé por qué querría hacer eso)

+0

Usando el compilador JDK 1.6. Parece extraño que pueda especificar la versión de destino y la versión de origen, pero da un error si no son las mismas. –

+0

Puede especificar una versión de origen anterior a la versión de destino. Por lo tanto, su fuente 1.4 con Enumerations llamada enum aún puede compilar y trabajar en JDKs en tiempo de vida sin modificaciones. –

6

I have a project that uses generics and a few Java 1.5/6 bits and pieces. Is it possible to compile this code to work on a system running a 1.4 JRE?

Am I going to have to go through all my code and change the 1.5 stuff to make this work?

Sí. Pero hay una manera de automatizar eso, usando una herramienta llamada Retroweaver. Sin embargo, no hay garantía de que atrape todo.

1

He tenido una buena experiencia con Retrotranslator (retroweaver no funcionó bien con lo que estaba necesitando, no recuerdo exactamente qué).

Funcionó muy bien para mi propósito (crear versiones JDK1.4 de Logback).

http://retrotranslator.sourceforge.net/

Cuestiones relacionadas