PDA

Ver la Versión Completa : Compilación condicional en Java ?


pmaicas
18/08/12, 11:56:11
A ver si algún experto en java tiene una solucion a esto :pensando:

Visto que no existe un preprocesador para java, al estilo del de C, ¿ como puedo hacer que una parte del código se compile en un proyecto y no en otro proyecto (#ifdef...) ?

El problema es que tengo código común a varios proyectos, este código necesita acceder a la clase R que se genera automáticamente, a R no puedo cambiarle el nombre de package, ni derivar otra clase de ella porque esta declarada 'final'.

Ahora lo que hago es cambiar los imports de R a mano, cada vez que voy a compilar un proyecto diferente.

¿ No hay un preprocesador (aunque no sea estandard) que se pueda integrar en eclipse ?

kriogeN
18/08/12, 12:53:44
No existe nada, al menos con el Java de Sun (y creo que con el de IBM y el OpenJDK tampoco).

La única solución que le veo a tu problema es que lo intentes hacer mediante Reflexión, pasando el nombre del paquete como parametro.

mocelet
18/08/12, 13:04:29
Interesante... por lo que he podido ver, todos los automatismos involucran a ant (lo cual implica decirle adiós a la generación automágica de apks por parte del plugin de Android).

Con las tareas de ant configuradas ya sí puedes hacerle perrerías, como meter el preprocesador de CPP en medio. Aunque entonces la corrección automática de Eclipse supongo que tendrías que desactivarla.

He encontrado un plugin sencillo para eclipse que lo llama "configurador de versiones" http://prebop.sourceforge.net/ , también requiere ant, pero las directivas de compilación van en comentarios y no habrá problema al usar el corrector de Eclipse.

Otra opción que se me ocurre, de nuevo con ant, es que si lo único que tienes que hacer es cambiar el nombre del import de R, uses la tarea Replace (http://ant.apache.org/manual/Tasks/replace.html) de ant antes de compilar. Esa tarea se encarga de buscar cierto texto en los ficheros y cambiarlo. Creo que sería lo más fácil.

pmaicas
18/08/12, 19:23:41
Gracias a ambos.

Creo que las dos soluciones aportadas por mocelet me sirven.