Find unused classes in a Java Eclipse project

49,416

Solution 1

I also like to use UCDetector:

screenshot

UCDetector (Unecessary Code Detector) is a Open Source eclipse PlugIn Tool to find unecessary (dead) public java code. It also tries to make code final, protected or private.

Bonus: it can also find cyclic dependencies between classes

(also a number of other tools -- including Findbugs -- knows how do do that too)


Caveat: Cid mentions in the comments:

UCDetector shall not work if there are interface implementations which will be known only at runtime.
It incorrectly marks the implementation classes as unused.


Update 2017: static code analysis has evolved quite a bit in 8 years.
Using SonarLint for Eclipse, you can use the the latest SonarJava 4.6 plugin to analyze your code.
It will find dead code.

Solution 2

ProGuard can be used to print a report of unused classes/methods. It's a pain to supply all the dependent jars to it, though.

These options list unused classes, fields, and methods in the application mypackage.MyApplication:

-injars      in.jar
-libraryjars <java.home>/lib/rt.jar

-dontoptimize
-dontobfuscate
-dontpreverify
-printusage

-keep public class mypackage.MyApplication {
    public static void main(java.lang.String[]);
}
Share:
49,416
Paul Efford
Author by

Paul Efford

Updated on July 05, 2022

Comments

  • Paul Efford
    Paul Efford almost 2 years

    I have a large Eclipse project in which there exist several classes which, although they ceased to be used anywhere, were never marked @Deprecated.

    How can I easily find all of these?

  • Jay
    Jay over 12 years
    Does this work for android projects? I downloaded, installed, and the UCDetector menu is no where to be found :(
  • Cid
    Cid over 11 years
    @VonC - UCDetector shall not work if there are interface implementations which will be known only at runtime. It incorrectly marks the implementation classes as unused :(
  • VonC
    VonC over 11 years
    @Cid interesting. I have included your comment in the answer for more visibility.
  • Zero3
    Zero3 over 8 years
    I had the same idea! Have you found a nice way to specify all the dependencies for a Maven project?
  • jmu
    jmu over 7 years
    @Zero3 as an option you can use maven dependency plugin to list all dependencies or extract them to some local directory then run windows or linux script which will list jars in directory and generate jar list parameter string and run proguard.
  • JRichardsz
    JRichardsz over 5 years
    It will be greatfull if a maven plugin would contain this functionality!!!
  • VonC
    VonC over 5 years
    @JRichardsz I agree. Only maven.apache.org/plugins-archives/maven-shade-plugin-3.1.1/… is coming close, to my knowledge.
  • JRichardsz
    JRichardsz over 5 years
    @VonC yeah!! In my case I need to detect developers bad practices at build stage. I think this project is a good alternative but with maven. Check my recent TODO jrichardsz.github.io/java/…
  • luis.espinal
    luis.espinal almost 4 years
    The question asks for an Eclipse solution. PS, I didn't neg rep you, just adding a comment.