Search code examples
mavencircular-dependencydependency-analysis

Maven 2 & 3 differences on dependency:analyze with cycle


Here's the dependency tree I'm using:

[INFO] ------------------------------------------------------------------------
[INFO] Building PA 0.0.2-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ PA ---
[INFO] myTest:PA:jar:0.0.2-SNAPSHOT
[INFO] \- PC:PC:jar:0.0.1-SNAPSHOT:compile
[INFO]    \- myTest:PA:jar:0.0.1-SNAPSHOT:compile

As you can see, there's a cycle :

PA > PC > PA

Using maven 2.2.1:

mvn dependency:analyze
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - myTest:PA:jar:0.0.2-SNAPSHOT
[INFO]    task-segment: [dependency:analyze]
[INFO] ------------------------------------------------------------------------
...
[INFO] No dependency problems found

Using maven 3.3.3:

mvn dependency:analyze
[INFO] ------------------------------------------------------------------------
[INFO] Building PA 0.0.2-SNAPSHOT
[INFO] ------------------------------------------------------------------------
...
[INFO] --- maven-dependency-plugin:2.8:analyze (default-cli) @ PA ---
[WARNING] Used undeclared dependencies found:
[WARNING]    myTest:PA:jar:0.0.1-SNAPSHOT:compile

The analyze using maven 3 wants me to add PA as a dependency to PA, to itself. Is it possible to have the same behavior as maven 2 using maven 3?


Solution

  • Here's the workaround I'm using to have the same result as Maven 2 using Maven 3:

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <configuration>
                        <ignoredDependencies>
                            <ignoredDependencie>${project.groupId}:${project.artifactId}::</ignoredDependencie>
                        </ignoredDependencies>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>