rewrite icon indicating copy to clipboard operation
rewrite copied to clipboard

Maven: Version resolution not working for dependency referencing older BOM

Open thomaszub opened this issue 2 years ago • 1 comments

Hi,

I get an exception running a run or dryRun mojo with the rewrite-maven-plugin. The project is a multi-module project with a BOM for managing dependencies. If a dependency references an older version of the BOM the following exception occurs:

Caused by: org.openrewrite.maven.internal.MavenParsingException: No version provided for dependency org.springframework:spring-jdbc
    at org.openrewrite.maven.tree.ResolvedPom.resolveDependencies (ResolvedPom.java:525)
    at org.openrewrite.maven.tree.ResolvedPom.resolveDependencies (ResolvedPom.java:499)
    at org.openrewrite.maven.tree.MavenResolutionResult.resolveDependencies (MavenResolutionResult.java:143)
    at org.openrewrite.maven.MavenParser.parseInputs (MavenParser.java:111)
    at org.openrewrite.Parser.parse (Parser.java:43)
    at org.openrewrite.maven.MavenMojoProjectParser.parseMaven (MavenMojoProjectParser.java:302)
    at org.openrewrite.maven.MavenMojoProjectParser.listSourceFiles (MavenMojoProjectParser.java:115)
    at org.openrewrite.maven.AbstractRewriteMojo.listResults (AbstractRewriteMojo.java:210)
    at org.openrewrite.maven.AbstractRewriteDryRunMojo.execute (AbstractRewriteDryRunMojo.java:56)
...

The dependency setup is roughly of this form:

 org.openrewrite.maven:prj:jar:1.1 (dependencies managed by org.openrewrite.maven:bom:1.1)
 \- org.openrewrite.maven:dep:jar:1.0:compile (dependencies managed by org.openrewrite.maven:bom:1.0)
    \- org.springframework:spring-jdbc:jar:5.3.21:compile
       +- org.springframework:spring-beans:jar:5.3.21:compile
       +- org.springframework:spring-core:jar:5.3.21:compile
       |  \- org.springframework:spring-jcl:jar:5.3.21:compile
       \- org.springframework:spring-tx:jar:5.3.21:compile

If the newer BOM does not manage the dependency org.springframework:spring-jdbc the exception occurs.

As the project setup is a little bit weird, I created the repository https://github.com/thomaszub/rewrite-maven-bug for reproducing the issue:

  1. Execute mvn clean install in the first directory
  2. Execute in the seconddirectory e.g. mvn -e org.openrewrite.maven:rewrite-maven-plugin:4.28.0-SNAPSHOT:dryRun -DactiveRecipes=org.openrewrite.java.RemoveUnusedImports

Kind regards

Thomas

thomaszub avatar Jul 27 '22 14:07 thomaszub

@thomaszub Very much appreciate the detail and reproducible example. The issue you describe here is one of the most common parsing problems we are facing nightly trying to parse OSS projects, and this really shines a light on the specific cause.

jkschneider avatar Jul 29 '22 01:07 jkschneider

@thomaszub Again, thank you for the detailed and reproducible example, it helped a lot!

tkvangorder avatar Aug 16 '22 00:08 tkvangorder