2011-02-28 19 views
6

Descubrí recientemente que BlackBerry treats all classes with the same fully-qualified name as identical --independientemente de si se encuentran en aplicaciones completamente diferentes o no - hace que las aplicaciones que usan diferentes versiones de nuestras bibliotecas compartidas se rompan cuando están instaladas en el mismo teléfono .Cambiar los nombres de los paquetes antes de compilar en Bamboo

Para resolver este problema, estamos planeando cambiar los nombres de los paquetes para incluir un número de versión y luego compilarlo. ¿Puede alguien explicar cómo, utilizando bambú, puedo insertar un paso en nuestro proceso de compilación que:

  • cambia ciertos nombres de paquetes
  • reemplaza todas las referencias de código en el antiguo nombre del paquete con referencias al nuevo nombre de paquete?

Respuesta

2

Una gran herramienta que se hace especialmente para la tarea de cambiar los nombres completos de las clases de Java en archivos jar es jarjar. Se puede usar fácilmente desde Ant, o alternativamente from a shell script.

Nunca he usado Bamboo, supongo que debería funcionar allí también. Por supuesto, puede haber algunas restricciones especiales en ese entorno (con respecto a la manipulación de bytecode), no sé (?)

+0

Drat, que se ve muy bien, y no estoy seguro de que funcione en nuestro caso específico. Parece que jarjar reemplaza la tarea jar, pero no usamos jar para compilar: BlackBerry tiene su propia tarea ant, rapc, que maneja la compilación. ¿Sabes si es posible usar jarjar para * solo * hacer el paso de cambio de nombre del paquete? –

+0

@Amanda: Hice una búsqueda rápida en Google de rapc (realmente no sé nada al respecto). Se ve, como si también se pudiera usar con archivos jar: http://codeforfun.wordpress.com/2008/09/09/how-to-use-rapc-from-rim-dirty-details/ "The last last el parámetro debe especificar un archivo jar que contenga las clases compiladas o una lista de los archivos .java que pretenda compilar ". Si eso funciona, primero podrías organizar tus clases, luego aplicar jarjar y luego ejecutar rapc en el contenedor. –

2

No estoy familiarizado con Bamboo y no incluyó mucha información sobre su sistema de compilación. Si está utilizando Maven, se podría utilizar el shade plugin:

Este plugin proporciona la capacidad para empaquetar el artefacto en una súper-jar, incluyendo sus dependencias y de sombra - es decir, cambiar el nombre - los paquetes de algunas de las dependencias .

El second example here muestra cómo configurar el cambio de nombre de paquete. El archivo jar resultante tendría que ser procesado por rapc como en Chris Lerchers comment to his answer. También debería ser posible integrar esto en una construcción maven usando el exec plugin.

Cuestiones relacionadas