2009-04-01 33 views
9

Tengo un proyecto Java que actualmente tiene muchos JAR en su directorio de bibliotecas, que están todos incluidos en el paquete resultante al compilar. Sin embargo, sé que algunas de estas librerías nunca se mencionan en el proyecto.Herramienta para eliminar dependencias innecesarias en un proyecto Java

¿Hay alguna herramienta que pueda buscar libs que no estén referenciadas dentro del proyecto? Supongo que debe haber algo en ese sentido.

Por cierto, un plugin de Eclipse sería increíble.

EDIT: elegí ir con ClassDep porque era la única sugerencia que funcionó. Sin embargo, tengo algunos problemas con esto: compruebe this question

+0

Excelente pregunta: siempre he querido una herramienta para hacer esto. ¡Tiene que haber uno por ahí! –

+0

http://sourceforge.net/project/downloading.php?group_id=147285&use_mirror=freefr&filename=cphelper_1.2.8GA.zip funciona para la descarga – VonC

+0

Lo compartiré esta noche o mañana: cualquier archivo para compartir está en "acceso denegado" de trabajo;) – VonC

Respuesta

4

ClassDep (de Sun, en el kit de desarrollo Jini) lo hará por usted.

+0

Parece genial, pero parece que no es trivial de usar. Estoy publicando otra pregunta al respecto. –

+0

Hola, Brian. Si pudiera, consulte http://stackoverflow.com/questions/745574/classpath-problems-with-jini-classdep-javas-dependency-finder –

+1

El enlace de ClassDep dado arriba ahora apunta a algún proyecto de Apache River que no tiene pista sobre cómo usarlo. Alguien tiene sugerencias? –

2

ClassPathHelper puede ayudar con eso.

particular los platos del "No en la ruta de clases Ver"

Not on Classpath

Este punto de vista exploraciones para los botes que no están en la ruta de clase (pero están bajo el proyecto actual). Proporciona exploración básica de paquetes y clases que están disponibles pero no en classpath. Esto puede ser útil al intentar crear una ruta de clases, ya que puede buscar rápidamente las clases que faltan para ver qué jarras las contienen.

+0

Debo pasar mucho tiempo aquí ... Cuando vi una captura de pantalla de Eclipse, inmediatamente pensé "¡VonC!" –

+0

TssTss ... y otra entrada para agregar a "¿Sabía que ha estado navegando demasiado desbordamiento de pila cuando?" pregunta (http://stackoverflow.com/questions/247342);) – VonC

+0

¡Me muero por probarlo, pero no puedo descargarlo! http://sourceforge.net/project/showfiles.php?group_id=147285&package_id=162288 (dice que no está disponible - ¿WTF?) –

1

No es un plugin de eclipse, pero creo que la funcionalidad de "contracción" de ProGuard es exactamente lo que estás buscando.

+0

No lo creo: proguard puede eliminar las clases no utilizadas de los archivos de entrada pero no elimina los archivos de biblioteca de un proyecto –

7

Tenga en cuenta que una clase se carga mediante Class.forName() y no se especifica como una dependencia en el archivo de manifiesto (hay un atributo Depends-On: que es para eso, pero muchas personas no especifican esto, que rompe herramientas como esta, la ruina de mi existencia cuando trabajé en una herramienta así).

+0

hola ¡Problema de detención! –

+0

@Matt No 100% seguro de lo que quieres decir ... ¿puedes dar más detalles? – TofuBeer

0

Tampoco puede decir si los JAR que no importa son dependencias requeridas de las dependencias. Por ejemplo, si usa Spring, viene con sus propias dependencias, incluso si no importa ni llama esas clases en su código. No conozco ProGuard, ¿comprueba esos casos?

+0

Un rastreador de dependencia adecuado hará eso (escribí uno en 1998/9 que lo hizo). – TofuBeer

1

Escribí un pequeño complemento de eclipse que toma un java project existente del área de trabajo. Para cada classpath entry de los proyectos raw classpath es removes de los proyectos raw classpath y builds the project. Si no es problemmarkers con un error de gravedad appear on the project, elimina permanentemente la entrada classpath del classpath raw de los proyectos.

No puedo compartir ese complemento, pero eso no es demasiado trabajo para implementarlo usted mismo con los enlaces a la API dada anteriormente.

Cuestiones relacionadas