Is there a simple way to remove unused dependencies from a maven pom.xml?
MavenMaven 2Maven 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
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...