openrewrite / rewrite-maven-plugin

OpenRewrite's Maven plugin.
https://openrewrite.github.io/rewrite-maven-plugin/plugin-info.html
Apache License 2.0
127 stars 67 forks source link

Exclusions resolve wrong base path on multimodule projects #801

Open Philzen opened 2 weeks ago

Philzen commented 2 weeks ago

What version of OpenRewrite are you using?

I am using rewrite-maven-plugin 5.33.0

How are you running OpenRewrite?

<plugin>
    <groupId>org.openrewrite.maven</groupId>
    <artifactId>rewrite-maven-plugin</artifactId>
    <version>5.33.0</version>
    <configuration>
        <detail>true</detail>
        <activeRecipes>
            <recipe>org.philzen.oss.testng.MigrateToJunit5</recipe>
        </activeRecipes>
        <exclusions>
            <exclude>${project.basedir}/bin/**</exclude>
            <exclude>${project.basedir}/docs/**</exclude>
            <exclude>${project.basedir}/modules/openapi-generator-gradle-plugin/**</exclude>
            <exclude>${project.basedir}/modules/openapi-generator-maven-plugin/**</exclude>
            <exclude>${project.basedir}/samples/**</exclude>
            <exclude>${project.basedir}/website/**</exclude>
        </exclusions>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.philzen.oss</groupId>
            <artifactId>rewrite-recipe</artifactId>
            <version>1.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</plugin>

Problem details and root

I was constantly running into

[ERROR] Java heap space -> [Help 1] 
java.lang.OutOfMemoryError: Java heap space

when executing mvn rewrite:run on a rather large repo (this one).

So i thought i could mitigate that by limiting the amount of files being parsed, as i was seeing "[WARNING] There were problems parsing …" on lots of files that are completely irrelevant to the migration (i.e. yaml files), by using <excludes> in the rewrite-maven-plugin config.

All of the following did not work, there was no effect whatsoever on the warnings and the fatal OutOfMemoryError:

Running again with -X revealed what i believe to be the issue here:

[DEBUG]   (f) exclusions = [
~/prog/oss/openapi-generator/modules/openapi-generator/bin/**, 
~/prog/oss/openapi-generator/modules/openapi-generator/docs/**, 
~/prog/oss/openapi-generator/modules/openapi-generator/modules/openapi-generator-gradle-plugin/**,
~/prog/oss/openapi-generator/modules/openapi-generator/modules/openapi-generator-maven-plugin/**, 
~/prog/oss/openapi-generator/modules/openapi-generator/samples/**, 
~/prog/oss/openapi-generator/modules/openapi-generator/website/**]

(reformatted and actual home dir replaced with ~ for legibility here)

The pom.xml plugin config posted above lies in the root dir (~/prog/oss/openapi-generator) but all the excludes are resolved to the context of the module currently being processed, hence they are not being applied as expected – the samples folder in the main directory will still be parsed and the run fails with OutOfMemoryException.

Workaround

**/samples/** works (obviously)

But this workaround may not be feasible for everybody, i.e. another recipe user may need to exclude ${project.basedir}/samples but not ${project.basedir}/modules/some-module/samples.

timtebeek commented 2 weeks ago

Thanks for the detailed report! It seems we convert the configured paths to matchers on these lines, which then might need to be revised. https://github.com/openrewrite/rewrite-maven-plugin/blob/9fc5e1057e37828391b32415faf26049c90d9084/src/main/java/org/openrewrite/maven/MavenMojoProjectParser.java#L174-L191