2009-04-01 9 views
9

J'ai un projet Java qui contient actuellement beaucoup de fichiers JAR dans son répertoire de bibliothèques, qui sont tous inclus dans le package résultant lors de la construction. Je sais, cependant, que certaines de ces bibliothèques ne sont jamais référencées dans le projet.Outil pour supprimer les dépendances inutiles dans un projet Java

Existe-t-il un outil capable de rechercher des bibliothèques qui ne sont pas référencées dans le projet? Je suppose qu'il doit y avoir quelque chose dans ce sens.

BTW, un plugin Eclipse serait génial.

EDIT: J'ai choisi d'aller avec ClassDep parce que c'était la seule suggestion qui a fonctionné. Cependant, j'ai quelques problèmes avec cela: s'il vous plaît vérifier this question

+0

Excellente question - J'ai toujours voulu un outil pour le faire. Il doit y en avoir un là-bas! –

+0

http://sourceforge.net/project/downloading.php?group_id=147285&use_mirror=freefr&filename=cphelper_1.2.8GA.zip fonctionne pour le téléchargement – VonC

+0

Je vais partager ce soir ou demain: tout fichier de partage est en "accès refusé" de travail;) – VonC

Répondre

4

ClassDep (de Sun, dans le kit de développement Jini) le fera pour vous.

+0

Cela semble très bien, mais il semble que ce ne soit pas trivial à utiliser. Je poste une autre question à ce sujet. –

+0

Salut, Brian. Si vous le pouvez, s'il vous plaît vérifier http://stackoverflow.com/questions/745574/classpath-problems-with-jini-classdep-javas-dependency-finder –

+1

Lien ClassDep donné ci-dessus pointe maintenant vers un projet Apache River qui n'a pas indice quant à la façon de l'utiliser. Quelqu'un a-t-il des suggestions? –

2

ClassPathHelper peut vous aider avec cela.

espacially le "Pas sur Classpath Voir"

Not on Classpath

Ce point de vue scans pour les pots qui ne sont pas sur le chemin de classe (mais dans le cadre du projet en cours). Il fournit une navigation basique des paquets et des classes qui sont disponibles mais pas sur le chemin de classe. Cela peut être utile lorsque vous tentez de créer un chemin de classe, car vous pouvez parcourir rapidement les classes manquantes pour voir quels jarres les contiennent.

+0

Je dois traîner trop ici ... Quand j'ai vu une capture d'écran Eclipse, j'ai immédiatement pensé "VonC!" –

+0

TssTss ... et encore une autre entrée à ajouter à la "Vous savez que vous avez trop cherché sur Stack Overflow quand?" question (http://stackoverflow.com/questions/247342);) – VonC

+0

Je meurs d'envie de le tester, mais ne peut pas le télécharger! http://sourceforge.net/project/showfiles.php?group_id=147285&package_id=162288 (dit qu'il est indisponible - WTF?) –

1

Pas un plugin eclipse, mais je crois que la fonctionnalité "rétrécissement" de ProGuard est exactement ce que vous cherchez.

+0

Je ne pense pas: proguard peut supprimer les classes inutilisées de vos fichiers jar input mais ne supprime pas les jarres de bibliothèque d'un projet –

7

Méfiez-vous du cas où une classe est chargée via Class.forName() et non spécifiée en tant que dépendance dans le fichier manifest (il existe un attribut Depends-On: pour cela, mais de nombreuses personnes ne le spécifient pas ça, ça casse des outils comme ça, le fléau de mon existence quand j'ai travaillé sur un tel outil).

+0

bonjour problème d'arrêt! –

+0

@Matt Pas sûr à 100% de ce que vous voulez dire ... pouvez-vous élaborer? – TofuBeer

0

Vous ne pouvez pas non plus dire si les fichiers JAR que vous n'importerez pas sont des dépendances requises pour les dépendances. Par exemple, si vous utilisez Spring, il possède ses propres dépendances, même si vous n'importez pas ou n'appelez pas ces classes dans votre code. Je ne connais pas ProGuard - vérifie-t-il ces cas?

+0

Un traqueur de dépendances approprié le fera (j'en ai écrit un en 1998/9 qui l'a fait). – TofuBeer

1

J'ai écrit un petit plugin eclipse qui prend un java project existant à partir de l'espace de travail. Pour chaque classpath entry des projets raw classpath il removes il des projets raw classpath et builds the project. Si elle n'est pas problemmarkers avec l'erreur de gravité appear on the project, elle supprime définitivement l'entrée classpath du chemin de classe brut des projets.

Je ne suis pas capable de partager ce plugin, mais ce n'est pas trop de travail pour l'implémenter vous-même avec les liens vers l'API ci-dessus.

Questions connexes