Hi everyone,
I'm Hitesh, a CS student planning to apply for GSoC 2027 with Apache Maven.
I wanted to share my proposal idea early and get community input before
writing the full application.
The proposal: add a dependency:insight goal to the maven-dependency-plugin
that answers the question "Why is artifact X on my classpath?"
Current situation:
Users run `mvn dependency:tree` and manually scan hundreds of lines to
find a transitive dependency's origin. There is no direct command for this.
Proposed solution:
$ mvn dependency:insight -Dartifact=guava
guava:32.1-jre (declared: 32.0, overridden by spring-boot-dependencies)
└─ spring-context:6.1.2
└─ spring-core:6.1.2
└─ com.example:my-app (root)
Implementation approach:
- Hook into the existing DependencyCollector/DependencyNode graph,
already built during the resolve phase
- Perform a reverse BFS from the target artifact node back to the root
- Surface version mediation info from DefaultDependencyCollector when the
resolved version differs from the declared one
- Output both text and, optionally, a machine-readable format
Gradle's `dependencyInsight` task already solves this for Gradle users —
this proposal brings equivalent clarity to the Maven ecosystem. I am not
proposing to change any resolution logic, only to expose what Maven already
computes internally in a more accessible form.
I checked the GSoC 2025 and 2026 idea lists and found no existing Maven
proposals, so I believe this is new ground.
I'd appreciate:
1. Feedback on the scope — too big, too small, or about right for 12
weeks?
2. Whether a Maven committer would be willing to mentor this
3. Any prior discussion or JIRA tickets I should be aware of
Thank you for reading. Happy to answer questions or share a draft write-up.
Best regards,
B.V. Hitesh Sai
https://github.com/Hiteshsai007
Sai Vidya Institute of Technology, India