2010-04-09 29 views
8

He desarrollado un módulo para un proyecto Java. El módulo depende de la biblioteca externa (fastutil). El problema es que el archivo fastutil.jar es un par de veces más pesado que todo el proyecto (14 MB). Solo uso un pequeño subconjunto de las clases de la biblioteca. El módulo ya está terminado, y es probable que nadie lo extienda en el futuro. ¿Hay alguna manera de extraer solo la clase relevante a algunos fastutil_small.jar para que otros no tengan que descargar todo este peso extra?Reducir el tamaño del archivo jar externo

+0

¿Qué es lo que realmente quieres? – Venkat

+0

Bueno, para agregar mi módulo al proyecto. es un par de paquetes java relativamente pequeños. todo lo que quiero es que mi dependencia de unas pocas clases de 'fastutil' no aumente el tamaño del proyecto tres veces. –

Respuesta

8

Las herramientas de ofuscación como ProGuard suelen proporcionar una función para eliminar las clases no utilizadas (e incluso campos y métodos) del archivo jar. Sin embargo, debe tener cuidado para verificar que todo funcione, ya que podría estar utilizando reflecton para acceder a clases o métodos que ProGuard no puede analizar.

Sólo se puede utilizar esta característica y ya llegar a ser muy poco de ahorro de

O puede combinar con otras técnicas de ofuscación de ahorro de espacio (como la clase y el cambio de nombre del método) para ahorrar aún más espacio a costa de más difícil depuración (tus seguimientos de pila serán más difíciles de analizar).

+1

+1 las primeras 5 palabras son exactamente lo que estaba pensando, al leer esta pregunta –

+0

de instrucciones de proguard: 'ProGuard requiere que los frascos de la biblioteca (o wars, orejas, cremalleras o directorios) de los frascos de entrada sean especificado. Estas son esencialmente las bibliotecas que necesitaría para compilar el código. ProGuard los usa para reconstruir las dependencias de clase que son necesarias para un procesamiento adecuado. Los frascos de la biblioteca siempre permanecen sin cambios. Deberías ponerlos en la ruta de clase de tu aplicación final. Pero reducir el tamaño de los archivos jar de la biblioteca es exactamente lo que quiero (¿o estoy usando el vocabulario incorrecto?). ¿Qué me estoy perdiendo? –

+0

@ Joe: se puede trabajar fácilmente alrededor de esto, mediante la especificación de la biblioteca a través de '-injars' y no a través de' -libraryjars' –

0

Yeah one crude es tener una copia de seguridad de su jar original. luego elimine todos los archivos de clase no utilizados del contenedor. y puede haber algunas referencias internas a otras clases que puede agregar cuando sea necesario. es decir, mientras lo ejecuta puede arrojar una excepción de clase no encontrada, entonces puede agregar esa clase desde el contenedor original a este contenedor.

5

Desde el installation instructions de fastutil:

Tenga en cuenta que el archivo jar es enorme, debido al gran número de clases: si va a enviar su propio frasco con algunas clases fastutil incluidos, usted debe buscar en AutoJar (también disponible en JPackage) para extraer automáticamente las clases necesarias.

+0

Sí, lo hice rtfm :) Simplemente no logré hacer algo útil con él todavía (novato, ¿recuerdas? :)) –

+1

Bueno, resulta que todo lo que tuve que hacer fue intentarlo tres veces. –

2

Como fastutil es el software de código abierto LGPL, puede copiar los archivos fuente relevantes a su proyecto y soltar ese archivo jar. El compilador le dirá si tiene todos los archivos que necesita. Simplemente mantenga los paquetes como están y ponga una copia del archivo de licencia fastutil en la parte superior.

Cuestiones relacionadas