Is there a simple way to remove unused dependencies from a maven pom.xml?

MavenMaven 2

Maven Problem Overview


I have a large Maven project with many modules and many pom.xml files. The project has changed and I suspect the pom's contain some unnecessary dependencies. Is there is a command which removes any unused dependencies from a pom?

Maven Solutions


Solution 1 - Maven

The Maven Dependency Plugin will help, especially the dependency:analyze goal:

> dependency:analyze analyzes the dependencies of this project and determines which are: used and declared; used and undeclared; unused and declared.

Another thing that might help to do some cleanup is the Dependency Convergence report from the Maven Project Info Reports Plugin.

Solution 2 - Maven

You can use dependency:analyze -DignoreNonCompile

This will print a list of used undeclared and unused declared dependencies (while ignoring runtime/provided/test/system scopes for unused dependency analysis.)

## Be careful while using this, some libraries used at runtime are considered unused

For more details refer to this link

Solution 3 - Maven

As others have said, you can use the dependency:analyze goal to find which dependencies are used and declared, used and undeclared, or unused and declared. You may also find dependency:analyze-dep-mgt useful to look for mismatches in your dependencyManagement section.

You can simply remove unwanted direct dependencies from your POM, but if they are introduced by third-party jars, you can use the <exclusions> tags in a dependency to exclude the third-party jars (see the section titled Dependency Exclusions for details and some discussion). Here is an example excluding commons-logging from the Spring dependency:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring</artifactId>
  <version>2.5.5</version>
  <exclusions>
    <exclusion>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </exclusion>
  </exclusions> 
</dependency>

Solution 4 - Maven

Have you looked at the Maven Dependency Plugin ? That won't remove stuff for you but has tools to allow you to do the analysis yourself. I'm thinking particularly of

mvn dependency:tree

Solution 5 - Maven

I had similar kind of problem and decided to write a script that removes dependencies for me. Using that I got over half of the dependencies away rather easily.

http://samulisiivonen.blogspot.com/2012/01/cleanin-up-maven-dependencies.html

Solution 6 - Maven

You can use DepClean <https://github.com/castor-software/depclean/>

> DepClean is a tool to automatically remove dependencies that are included in your Java dependency tree but are not actually used in the project's code.

Solution 7 - Maven

If you are using eclipse, right-click on the jar in Maven Dependencies: Select Maven -> Exclude Maven Artifact...

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionthickostickoView Question on Stackoverflow
Solution 1 - MavenPascal ThiventView Answer on Stackoverflow
Solution 2 - MavenSaikatView Answer on Stackoverflow
Solution 3 - MavenRich SellerView Answer on Stackoverflow
Solution 4 - MavenBrian AgnewView Answer on Stackoverflow
Solution 5 - Mavenuser1132305View Answer on Stackoverflow
Solution 6 - MavenMartin MonperrusView Answer on Stackoverflow
Solution 7 - MavenUsman MohyuddinView Answer on Stackoverflow