Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MRESOLVER-247: Introduce skipper to avoid unnecessary dependency reso… #158

Closed
wants to merge 4 commits into from

Conversation

caiwei-ebay
Copy link
Contributor

@caiwei-ebay caiwei-ebay commented Mar 8, 2022

Please check implementation details in https://issues.apache.org/jira/browse/MRESOLVER-247.

As discussed in MRESOLVER-228, here is the plan for multiple changes requested recently:

Implementation

This PR is for skip approach. It implements a skipper based on BFS to skip unnecessary dependency resolution for below cases:

  • Duplicate node (same GAV with different depth, will be marked as omitted duplicate by maven in dependency tree)
  • Conflict node (same GA but different version, will be simply skipped)

The skip logic resides with DependencyResolutionSkipper's skipResolution, here is the flow:

  1. Check if node has version conflict (same GA) with the winner, skip if conflicts; otherwise proceed with 2
  2. Check if node has duplicate conflict (same artifact/same GAV) with winner, if no, resolve the node; otherwise proceed with 3
  3. Check if the node is more left than last resolved node (of the same artifact), force resolving if yes; otherwise skipped (will be omitted duplicate by Maven).

Each node has 4 states after calling skipResolution:

  • to resolve (it is the winner in BFS, update cache after resolution)
  • force resolution(duplicate node however need to force resolving for scope retention, same GAV but different depth, won't update cache as maven will treat it as omit duplicate)
  • skipped as version conflict (version conflict loser, same GA but different version, simply skipped, maven will treat it as omit conflict)
  • skipped as duplicate(duplicate node, same GAV but different depth, simply skipped, maven will treat it as omit duplicate)

Force resolving partial duplicate nodes

Why?

This is because Maven picks up widest scope present among conflicting dependencies (scopes of the conflicts may differ), we need to retain the conflict paths for scope selection. Please check ConflictIdSorter and JavaScopeSelector for more details.

How?

Each node in the tree will have a coordinate in form of (depth, sequence of given depth), ex (2, 3) represents the 3rd node in depth 2.

Given multiple R nodes (same GAV) in the tree,

R#1 is resolved, R#1 is the winner as it is the first R node resolved in BFS approach (already the R node nearest to root)
If R#2 is more left than R#1 (current leftmost R node), force resolve R#2, mark R#2 is the leftmost node of R artifact
If R#3 is more left than R#2 (current leftmost R node), force resolve R#3, mark R#3 is the leftmost node of R artifact
If R#4 is not left than R#3 (current leftmost R node), skip R#4
If R#5 is not left than R#3 (current leftmost R node), skip R#5

@caiwei-ebay
Copy link
Contributor Author

@ibabiankou

Please also help check the PR to see if it is good for you to apply your changes in MRESOLVER-7.

@michael-o michael-o self-requested a review March 8, 2022 10:37
@caiwei-ebay caiwei-ebay force-pushed the master branch 3 times, most recently from b75db9a to 97cea5d Compare March 8, 2022 13:44
@caiwei-ebay
Copy link
Contributor Author

@michael-o

Thanks for the code review. Fixed already.
Also have certified this approach by dry-run thousands of apps in our company by comparing dependency tree and dependency list with/without this patch.

Please let me know if anything else I could help.

@michael-o
Copy link
Member

I will leave @ibabiankou at least a week to test and respond.

@michael-o
Copy link
Member

There is a regression. Have a look at: mng-5669.zip
Please diff the sorted logfiles and you will see that some dependencies have disappeared from the listing.

@caiwei-ebay
Copy link
Contributor Author

caiwei-ebay commented Mar 11, 2022

There is a regression. Have a look at: mng-5669.zip Please diff the sorted logfiles and you will see that some dependencies have disappeared from the listing.

Actually this is expected behavior. Skipper would simply skip resolving the conflict losers which will make maven read/parse less poms.

Regarding the source poms as below, they are actually read only once. This means function in MNG-5669 does not break.
How can I fix the IT? I did not find the code and unable to open the IT CI job.

{org.apache.maven.model.io.inputSource=null null, org.apache.maven.model.io.isStrict=true, org.apache.maven.model.building.source=/var/osipovmi/Projekte/maven-integration-testing/core-it-suite/target/test-classes/mng-5669-read-poms-once/pom.xml}
{org.apache.maven.model.io.inputSource=null null, org.apache.maven.model.io.isStrict=true, org.apache.maven.model.building.source=/var/osipovmi/Projekte/maven-integration-testing/core-it-suite/target/test-classes/mng-5669-read-poms-once/module1/pom.xml}
{org.apache.maven.model.io.inputSource=null null, org.apache.maven.model.io.isStrict=true, org.apache.maven.model.building.source=/var/osipovmi/Projekte/maven-integration-testing/core-it-suite/target/test-classes/mng-5669-read-poms-once/module2/pom.xml}
{org.apache.maven.model.io.inputSource=null null, org.apache.maven.model.io.isStrict=true, org.apache.maven.model.building.source=/var/osipovmi/Projekte/maven-integration-testing/core-it-suite/target/test-classes/mng-5669-read-poms-once/module3/pom.xml}

@cstamas
Copy link
Member

cstamas commented Mar 11, 2022

mvn 3.8.4:
Total time:    40.749 s
Total files: 4675
Total bytes: 169M

mvn master:
Total time:    38.446 s
Total files: 4673
Total bytes: 169M

mvn bfs:
Total time:    33.510 s
Total files: 4556
Total bytes: 168M

(all 3 building current mvn master 97c1e4b4aa73f5851801fdf5e17f013dd46a6b3e w/ empty local repo, primed proxy, no tests executed)
(files/bytes are count of files and total size in bytes of local repo AFTER build done)

@cstamas
Copy link
Member

cstamas commented Mar 11, 2022

maven-integration-testing dcd63dc29413e5154df524002eea967521dd09fc

mvn master:
[INFO] Results:
[INFO] 
[ERROR] Errors: 
[ERROR]   MavenITmng4913UserPropertyVsDependencyPomPropertyTest>AbstractMavenIntegrationTestCase.runTest:265->testit:59 » Verification
[INFO] 
[ERROR] Tests run: 890, Failures: 0, Errors: 1, Skipped: 0
[INFO] Total time:  23:30 min

mvn bfs (see footnote 1):
[INFO] Results:
[INFO] 
[ERROR] Failures: 
DT [ERROR]   MavenITmng3652UserAgentHeaderTest>AbstractMavenIntegrationTestCase.runTest:265->testmng3652_AdditionnalHttpHeaderConfiguredInSettings:334 expected:<[Maven Fu]> but was:<[Apache-Maven/4.0.0-alpha-1-SNAPSHOT (Java 11.0.14; Linux 5.13.0-35-generic)]>
DT [ERROR]   MavenITmng3652UserAgentHeaderTest>AbstractMavenIntegrationTestCase.runTest:265->testmng3652_UserAgentConfiguredInSettings:298 expected:<[Maven Fu]> but was:<[Apache-Maven/4.0.0-alpha-1-SNAPSHOT (Java 11.0.14; Linux 5.13.0-35-generic)]>
?? [ERROR]   MavenITmng5669ReadPomsOnce>AbstractMavenIntegrationTestCase.runTest:265->testWithBuildConsumer:131 [{org.apache.maven.model.io.inputSource=null null, org.apache.maven.model.io.isStrict=true, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/core-it-suite/target/test-classes/mng-5669-read-poms-once/pom.xml}, {org.apache.maven.model.io.inputSource=null null, org.apache.maven.model.io.isStrict=true, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/core-it-suite/target/test-classes/mng-5669-read-poms-once/module1/pom.xml}, {org.apache.maven.model.io.inputSource=null null, org.apache.maven.model.io.isStrict=true, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/core-it-suite/target/test-classes/mng-5669-read-poms-once/module2/pom.xml}, {org.apache.maven.model.io.inputSource=null null, org.apache.maven.model.io.isStrict=true, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/core-it-suite/target/test-classes/mng-5669-read-poms-once/module3/pom.xml}, {transformerContext=org.apache.maven.model.building.DefaultModelBuilder$DefaultTransformerContextBuilder$1@29f0c4f2}, {org.apache.maven.model.io.inputSource=org.apache.maven:maven-model-builder:4.0.0-alpha-1-SNAPSHOT:super-pom jar:file:/home/cstamas/Worx/apache-maven/maven-integration-testing/core-it-suite/target/apache-maven/lib/maven-model-builder-4.0.0-alpha-1-SNAPSHOT.jar!/org/apache/maven/model/pom-4.0.0.xml, xml:4.0.0=xml:4.0.0}, {transformerContext=org.apache.maven.model.building.DefaultModelBuilder$DefaultTransformerContextBuilder$1@7c3ebc6b}, {transformerContext=org.apache.maven.model.building.DefaultModelBuilder$DefaultTransformerContextBuilder$1@de18f63}, {transformerContext=org.apache.maven.model.building.DefaultModelBuilder$DefaultTransformerContextBuilder$1@54aca26f}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-parent/22/maven-parent-22.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/11/apache-11.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugins/maven-compiler-plugin/3.1/maven-compiler-plugin-3.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugins/maven-plugins/24/maven-plugins-24.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-parent/23/maven-parent-23.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/13/apache-13.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugins/maven-surefire-plugin/2.12.4/maven-surefire-plugin-2.12.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/surefire/surefire/2.12.4/surefire-2.12.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugins/maven-jar-plugin/2.4/maven-jar-plugin-2.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugins/maven-plugins/22/maven-plugins-22.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-parent/21/maven-parent-21.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/10/apache-10.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-api/2.0.6/maven-plugin-api-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven/2.0.6/maven-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-parent/5/maven-parent-5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/3/apache-3.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-project/2.0.6/maven-project-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-core/2.0.6/maven-core-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-artifact/2.0.6/maven-artifact-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-settings/2.0.6/maven-settings-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-model/2.0.6/maven-model-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-monitor/2.0.6/maven-monitor-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-9-stable-1/plexus-container-default-1.0-alpha-9-stable-1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-containers/1.0.3/plexus-containers-1.0.3.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/2.0.5/plexus-utils-2.0.5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/2.0.6/plexus-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-filtering/1.1/maven-filtering-1.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-shared-components/17/maven-shared-components-17.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-interpolation/1.13/plexus-interpolation-1.13.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-components/1.1.15/plexus-components-1.1.15.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/2.0.3/plexus-2.0.3.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-profile/2.0.6/maven-profile-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-artifact-manager/2.0.6/maven-artifact-manager-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-registry/2.0.6/maven-plugin-registry-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/1.4.1/plexus-utils-1.4.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-parameter-documenter/2.0.6/maven-plugin-parameter-documenter-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/reporting/maven-reporting-api/2.0.6/maven-reporting-api-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/reporting/maven-reporting/2.0.6/maven-reporting-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-repository-metadata/2.0.6/maven-repository-metadata-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-error-diagnostics/2.0.6/maven-error-diagnostics-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/commons-cli/commons-cli/1.0/commons-cli-1.0.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-descriptor/2.0.6/maven-plugin-descriptor-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/classworlds/classworlds/1.1/classworlds-1.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/junit/junit/3.8.1/junit-3.8.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/1.5.15/plexus-utils-1.5.15.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/2.0.2/plexus-2.0.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-interpolation/1.12/plexus-interpolation-1.12.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-components/1.1.14/plexus-components-1.1.14.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/sonatype/plexus/plexus-build-api/0.0.4/plexus-build-api-0.0.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/sonatype/spice/spice-parent/10/spice-parent-10.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/sonatype/forge/forge-parent/3/forge-parent-3.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-7/doxia-sink-api-1.0-alpha-7.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/doxia/doxia/1.0-alpha-7/doxia-1.0-alpha-7.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/1.5.8/plexus-utils-1.5.8.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-api/2.0.9/maven-plugin-api-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven/2.0.9/maven-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-parent/8/maven-parent-8.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/4/apache-4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-artifact/2.0.9/maven-artifact-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-core/2.0.9/maven-core-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-toolchain/1.0/maven-toolchain-1.0.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-shared-utils/0.1/maven-shared-utils-0.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-shared-components/18/maven-shared-components-18.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-shared-incremental/1.1/maven-shared-incremental-1.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-shared-components/19/maven-shared-components-19.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-compiler-api/2.2/plexus-compiler-api-2.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-compiler/2.2/plexus-compiler-2.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-components/1.3.1/plexus-components-1.3.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/3.3.1/plexus-3.3.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/sonatype/spice/spice-parent/17/spice-parent-17.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/sonatype/forge/forge-parent/10/forge-parent-10.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-compiler-manager/2.2/plexus-compiler-manager-2.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-compiler-javac/2.2/plexus-compiler-javac-2.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-compilers/2.2/plexus-compilers-2.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-container-default/1.5.5/plexus-container-default-1.5.5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-containers/1.5.5/plexus-containers-1.5.5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/2.0.7/plexus-2.0.7.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/1.5.1/plexus-utils-1.5.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-settings/2.0.9/maven-settings-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-parameter-documenter/2.0.9/maven-plugin-parameter-documenter-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-profile/2.0.9/maven-profile-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-model/2.0.9/maven-model-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-repository-metadata/2.0.9/maven-repository-metadata-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-error-diagnostics/2.0.9/maven-error-diagnostics-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-project/2.0.9/maven-project-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-descriptor/2.0.9/maven-plugin-descriptor-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-artifact-manager/2.0.9/maven-artifact-manager-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-monitor/2.0.9/maven-monitor-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.0.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-api/2.2.1/maven-plugin-api-2.2.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven/2.2.1/maven-2.2.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-parent/11/maven-parent-11.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/5/apache-5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-core/2.2.1/maven-core-2.2.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/3.0.8/plexus-utils-3.0.8.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/3.2/plexus-3.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-classworlds/2.2.2/plexus-classworlds-2.2.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/xbean/xbean-reflect/3.4/xbean-reflect-3.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/xbean/xbean/3.4/xbean-3.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/com/google/collections/google-collections/1.0/google-collections-1.0.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/com/google/google/1/google-1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/junit/junit/3.8.2/junit-3.8.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-registry/2.0.9/maven-plugin-registry-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/log4j/log4j/1.2.12/log4j-1.2.12.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/surefire/maven-surefire-common/2.12.4/maven-surefire-common-2.12.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-toolchain/2.0.9/maven-toolchain-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugin-tools/maven-plugin-annotations/3.1/maven-plugin-annotations-3.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugin-tools/maven-plugin-tools/3.1/maven-plugin-tools-3.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/surefire/surefire-api/2.12.4/surefire-api-2.12.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/commons/commons-parent/22/commons-parent-22.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/9/apache-9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-common-artifact-filters/1.3/maven-common-artifact-filters-1.3.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-shared-components/12/maven-shared-components-12.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-parent/13/maven-parent-13.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/6/apache-6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/reporting/maven-reporting-api/2.0.9/maven-reporting-api-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/reporting/maven-reporting/2.0.9/maven-reporting-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-9/plexus-container-default-1.0-alpha-9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-archiver/2.5/maven-archiver-2.5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-archiver/2.1/plexus-archiver-2.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/commons-lang/commons-lang/2.1/commons-lang-2.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/3.0/plexus-utils-3.0.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/sonatype/spice/spice-parent/16/spice-parent-16.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/sonatype/forge/forge-parent/5/forge-parent-5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-interpolation/1.15/plexus-interpolation-1.15.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/3.0.1/plexus-3.0.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-io/2.0.2/plexus-io-2.0.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-components/1.1.19/plexus-components-1.1.19.pom}] expected:<172> but was:<149>
?? [ERROR]   MavenITmng5669ReadPomsOnce>AbstractMavenIntegrationTestCase.runTest:265->testWithoutBuildConsumer:77 [{org.apache.maven.model.io.inputSource=null null, org.apache.maven.model.io.isStrict=true, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/core-it-suite/target/test-classes/mng-5669-read-poms-once/pom.xml}, {org.apache.maven.model.io.inputSource=null null, org.apache.maven.model.io.isStrict=true, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/core-it-suite/target/test-classes/mng-5669-read-poms-once/module1/pom.xml}, {org.apache.maven.model.io.inputSource=null null, org.apache.maven.model.io.isStrict=true, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/core-it-suite/target/test-classes/mng-5669-read-poms-once/module2/pom.xml}, {org.apache.maven.model.io.inputSource=null null, org.apache.maven.model.io.isStrict=true, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/core-it-suite/target/test-classes/mng-5669-read-poms-once/module3/pom.xml}, {org.apache.maven.model.io.inputSource=org.apache.maven:maven-model-builder:4.0.0-alpha-1-SNAPSHOT:super-pom jar:file:/home/cstamas/Worx/apache-maven/maven-integration-testing/core-it-suite/target/apache-maven/lib/maven-model-builder-4.0.0-alpha-1-SNAPSHOT.jar!/org/apache/maven/model/pom-4.0.0.xml, xml:4.0.0=xml:4.0.0}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-parent/22/maven-parent-22.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/11/apache-11.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugins/maven-compiler-plugin/3.1/maven-compiler-plugin-3.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugins/maven-plugins/24/maven-plugins-24.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-parent/23/maven-parent-23.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/13/apache-13.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugins/maven-surefire-plugin/2.12.4/maven-surefire-plugin-2.12.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/surefire/surefire/2.12.4/surefire-2.12.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugins/maven-jar-plugin/2.4/maven-jar-plugin-2.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugins/maven-plugins/22/maven-plugins-22.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-parent/21/maven-parent-21.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/10/apache-10.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-api/2.0.6/maven-plugin-api-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven/2.0.6/maven-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-parent/5/maven-parent-5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/3/apache-3.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-project/2.0.6/maven-project-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-core/2.0.6/maven-core-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-artifact/2.0.6/maven-artifact-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-settings/2.0.6/maven-settings-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-model/2.0.6/maven-model-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-monitor/2.0.6/maven-monitor-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-9-stable-1/plexus-container-default-1.0-alpha-9-stable-1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-containers/1.0.3/plexus-containers-1.0.3.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/2.0.5/plexus-utils-2.0.5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/2.0.6/plexus-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-filtering/1.1/maven-filtering-1.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-shared-components/17/maven-shared-components-17.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-interpolation/1.13/plexus-interpolation-1.13.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-components/1.1.15/plexus-components-1.1.15.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/2.0.3/plexus-2.0.3.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-profile/2.0.6/maven-profile-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-artifact-manager/2.0.6/maven-artifact-manager-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-registry/2.0.6/maven-plugin-registry-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/1.4.1/plexus-utils-1.4.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-parameter-documenter/2.0.6/maven-plugin-parameter-documenter-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/reporting/maven-reporting-api/2.0.6/maven-reporting-api-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/reporting/maven-reporting/2.0.6/maven-reporting-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-repository-metadata/2.0.6/maven-repository-metadata-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-error-diagnostics/2.0.6/maven-error-diagnostics-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/commons-cli/commons-cli/1.0/commons-cli-1.0.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-descriptor/2.0.6/maven-plugin-descriptor-2.0.6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/classworlds/classworlds/1.1/classworlds-1.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/junit/junit/3.8.1/junit-3.8.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/1.5.15/plexus-utils-1.5.15.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/2.0.2/plexus-2.0.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-interpolation/1.12/plexus-interpolation-1.12.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-components/1.1.14/plexus-components-1.1.14.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/sonatype/plexus/plexus-build-api/0.0.4/plexus-build-api-0.0.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/sonatype/spice/spice-parent/10/spice-parent-10.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/sonatype/forge/forge-parent/3/forge-parent-3.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-7/doxia-sink-api-1.0-alpha-7.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/doxia/doxia/1.0-alpha-7/doxia-1.0-alpha-7.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/1.5.8/plexus-utils-1.5.8.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-api/2.0.9/maven-plugin-api-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven/2.0.9/maven-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-parent/8/maven-parent-8.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/4/apache-4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-artifact/2.0.9/maven-artifact-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-core/2.0.9/maven-core-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-toolchain/1.0/maven-toolchain-1.0.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-shared-utils/0.1/maven-shared-utils-0.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-shared-components/18/maven-shared-components-18.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-shared-incremental/1.1/maven-shared-incremental-1.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-shared-components/19/maven-shared-components-19.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-compiler-api/2.2/plexus-compiler-api-2.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-compiler/2.2/plexus-compiler-2.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-components/1.3.1/plexus-components-1.3.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/3.3.1/plexus-3.3.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/sonatype/spice/spice-parent/17/spice-parent-17.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/sonatype/forge/forge-parent/10/forge-parent-10.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-compiler-manager/2.2/plexus-compiler-manager-2.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-compiler-javac/2.2/plexus-compiler-javac-2.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-compilers/2.2/plexus-compilers-2.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-container-default/1.5.5/plexus-container-default-1.5.5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-containers/1.5.5/plexus-containers-1.5.5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/2.0.7/plexus-2.0.7.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/1.5.1/plexus-utils-1.5.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-settings/2.0.9/maven-settings-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-parameter-documenter/2.0.9/maven-plugin-parameter-documenter-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-profile/2.0.9/maven-profile-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-model/2.0.9/maven-model-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-repository-metadata/2.0.9/maven-repository-metadata-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-error-diagnostics/2.0.9/maven-error-diagnostics-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-project/2.0.9/maven-project-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-descriptor/2.0.9/maven-plugin-descriptor-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-artifact-manager/2.0.9/maven-artifact-manager-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-monitor/2.0.9/maven-monitor-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.0.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-api/2.2.1/maven-plugin-api-2.2.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven/2.2.1/maven-2.2.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-parent/11/maven-parent-11.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/5/apache-5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-core/2.2.1/maven-core-2.2.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/3.0.8/plexus-utils-3.0.8.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/3.2/plexus-3.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-classworlds/2.2.2/plexus-classworlds-2.2.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/xbean/xbean-reflect/3.4/xbean-reflect-3.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/xbean/xbean/3.4/xbean-3.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/com/google/collections/google-collections/1.0/google-collections-1.0.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/com/google/google/1/google-1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/junit/junit/3.8.2/junit-3.8.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-plugin-registry/2.0.9/maven-plugin-registry-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/log4j/log4j/1.2.12/log4j-1.2.12.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/surefire/maven-surefire-common/2.12.4/maven-surefire-common-2.12.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-toolchain/2.0.9/maven-toolchain-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugin-tools/maven-plugin-annotations/3.1/maven-plugin-annotations-3.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/plugin-tools/maven-plugin-tools/3.1/maven-plugin-tools-3.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/surefire/surefire-api/2.12.4/surefire-api-2.12.4.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/commons/commons-parent/22/commons-parent-22.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/9/apache-9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-common-artifact-filters/1.3/maven-common-artifact-filters-1.3.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/shared/maven-shared-components/12/maven-shared-components-12.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-parent/13/maven-parent-13.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/apache/6/apache-6.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/reporting/maven-reporting-api/2.0.9/maven-reporting-api-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/reporting/maven-reporting/2.0.9/maven-reporting-2.0.9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-9/plexus-container-default-1.0-alpha-9.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/apache/maven/maven-archiver/2.5/maven-archiver-2.5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-archiver/2.1/plexus-archiver-2.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/commons-lang/commons-lang/2.1/commons-lang-2.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-utils/3.0/plexus-utils-3.0.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/sonatype/spice/spice-parent/16/spice-parent-16.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/sonatype/forge/forge-parent/5/forge-parent-5.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-interpolation/1.15/plexus-interpolation-1.15.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus/3.0.1/plexus-3.0.1.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-io/2.0.2/plexus-io-2.0.2.pom}, {org.apache.maven.model.io.isStrict=false, org.apache.maven.model.building.source=/home/cstamas/Worx/apache-maven/maven-integration-testing/repo/org/codehaus/plexus/plexus-components/1.1.19/plexus-components-1.1.19.pom}] expected:<168> but was:<145>
[ERROR] Errors: 
DT [ERROR]   MavenITmng3485OverrideWagonExtensionTest>AbstractMavenIntegrationTestCase.runTest:265->testitMNG3485:48 » Verification
DT [ERROR]   MavenITmng3599useHttpProxyForWebDAVMk2Test>AbstractMavenIntegrationTestCase.runTest:265->testitUseHttpProxyForWebDAV:226 » Verification
DT [ERROR]   MavenITmng3600DeploymentModeDefaultsTest>AbstractMavenIntegrationTestCase.runTest:265->testitMNG3600ModesSet:92 » Verification
DT [ERROR]   MavenITmng3600DeploymentModeDefaultsTest>AbstractMavenIntegrationTestCase.runTest:265->testitMNG3600NoSettings:50 » Verification
DT [ERROR]   MavenITmng3600DeploymentModeDefaultsTest>AbstractMavenIntegrationTestCase.runTest:265->testitMNG3600ServerDefaults:71 » Verification
DT [ERROR]   MavenITmng3652UserAgentHeaderTest>AbstractMavenIntegrationTestCase.runTest:265->testmng3652_UnConfiguredDAV:179 » Verification
DT [ERROR]   MavenITmng4360WebDavSupportTest>AbstractMavenIntegrationTestCase.runTest:265->testitJackrabbitBasedImpl:61->test:140 » Verification
DT [ERROR]   MavenITmng4360WebDavSupportTest>AbstractMavenIntegrationTestCase.runTest:265->testitSlideBasedImpl:73->test:140 » Verification
DT [ERROR]   MavenITmng4877DeployUsingPrivateKeyTest>AbstractMavenIntegrationTestCase.runTest:265->testit:56 » Verification
OM [ERROR]   MavenITmng4913UserPropertyVsDependencyPomPropertyTest>AbstractMavenIntegrationTestCase.runTest:265->testit:59 » Verification
DT [ERROR]   MavenITmng5175WagonHttpTest>AbstractMavenIntegrationTestCase.runTest:265->testmng5175_ReadTimeOutFromSettings:133 » Verification
[INFO] 
[ERROR] Tests run: 890, Failures: 4, Errors: 11, Skipped: 0
[INFO] Total time:  23:45 min

Legend:
OM - fails on master as well
DT - fails due htto transport (IT assumes Wagon is being used)

@cstamas
Copy link
Member

cstamas commented Mar 11, 2022

The one failing IT fix:
apache/maven-integration-testing#140

Reason is simple: this IT "counts" ALL the resolution that maven (erm, resolver) does, and fails due substantial difference between "old" resolver (DFS and w/o skipper) and this PR (BFS + skipper).

The PR above changes the Maven IT to not "lock down" the read POM count, but still assert that POMs are read only once.

Copy link
Member

@cstamas cstamas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@cstamas
Copy link
Member

cstamas commented Mar 11, 2022

One remark: maybe a config param to DISABLE skipper? As sometimes inspecting the "whole overloaded" graph is useful, no? And skipper is added always currently. So maybe an another skipper implementation that is "no-skip"?

@michael-o
Copy link
Member

mvn 3.8.4:
Total time:    40.749 s
Total files: 4675
Total bytes: 169M

mvn master:
Total time:    38.446 s
Total files: 4673
Total bytes: 169M

mvn bfs:
Total time:    33.510 s
Total files: 4556
Total bytes: 168M

(all 3 building current mvn master 97c1e4b4aa73f5851801fdf5e17f013dd46a6b3e w/ empty local repo, primed proxy, no tests executed) (files/bytes are count of files and total size in bytes of local repo AFTER build done)

This is actually fantastic since we save time when we skip. @jebeaudet Can you test this at work to speed up your build as well?

@michael-o
Copy link
Member

One remark: maybe a config param to DISABLE skipper? As sometimes inspecting the "whole overloaded" graph is useful, no? And skipper is added always currently. So maybe an another skipper implementation that is "no-skip"?

This makes sense. @caiwei-ebay Do you see a way to make this configurable?

@michael-o
Copy link
Member

This look very promising. Please document this parameter in the documentation page.

@michael-o
Copy link
Member

michael-o commented Mar 14, 2022

I'll leave Ivan one more week to respond since he's likely having a hard time.

@caiwei-ebay
Copy link
Contributor Author

This look very promising. Please document this parameter in the documentation page.

Please check ada9970

@cstamas
Copy link
Member

cstamas commented Mar 16, 2022

Project: maven master 31193cbf0c93205a63c8c7b372b09200f60e69f4
As before (3 runs, 1st run with empty repo) but now not using local repoMan, going directly for Maven Central.

mvn 3.8.5 (resolver 1.6.x + wagon, mvn 3.8.5 is on path):
cmd: mvn -Dmaven.repo.local=local-repo clean package -Drat.skip -Dtest=et -DfailIfNoTests=false
Total time : 03:00, 00:25, 00:25
Total files: 4249
Total bytes: 127 MB

mvn this PR (resolver master w/ bfs + transport-http + skipper):
cmd: ~/bin/apache-maven-4.0.0-alpha-1-SNAPSHOT/bin/mvn -Dmaven.repo.local=local-repo clean package -Drat.skip -Dtest=et -DfailIfNoTests=false
Total time : 01:55, 00:26, 00:26
Total files: 4121
Total bytes: 127 MB

mvn this PR (resolver master w/ bfs + transport-http + skipper) + SKIPPER DISABLED:
cmd: ~/bin/apache-maven-4.0.0-alpha-1-SNAPSHOT/bin/mvn -Dmaven.repo.local=local-repo clean package -Drat.skip -Dtest=et -DfailIfNoTests=false -Daether.dependencyCollector.useSkip=false
Total time : 02:24, 00:26, 00:27
Total files: 4247
Total bytes: 127 MB

@cstamas
Copy link
Member

cstamas commented Mar 16, 2022

Am getting consistently slower results (2nd, 3rd run), but unsure is it skipper or BFS that is on master?

@caiwei-ebay could you tell more about those projects you refer to? I guess they are not open (if they are, please point us on them), but I wonder what they have in common: size (as in module count/reactor size)? are they using version ranges? Are they having unused dependencies (as you refer to "make dep tree clean, remove unused dependencies")...?

@caiwei-ebay
Copy link
Contributor Author

caiwei-ebay commented Mar 17, 2022

Am getting consistently slower results (2nd, 3rd run), but unsure is it skipper or BFS that is on master?

@caiwei-ebay could you tell more about those projects you refer to? I guess they are not open (if they are, please point us on them), but I wonder what they have in common: size (as in module count/reactor size)? are they using version ranges? Are they having unused dependencies (as you refer to "make dep tree clean, remove unused dependencies")...?

@cstamas

Thanks for the test report.
The projects I mentioned in previous comment are company internal consuming internal artifacts from an internal maven repository based on Artifactory. The most common issue is heavy dependencies + different exclusions are widely used in project which make maven resolve duplicate node again and again. As to the heavy dependencies, they are formed after 10 years development with more and more dependencies added into their poms :). The maven build usually takes >5 minutes with tests skipped, this is why I say they are complex projects.

I'm not sure if I can find a opensource project that can reproduce such issue, even entire spring-boot project can print dependency:tree in 20s and does not have such issue. Or how about creating a mock app to demo the slowness case?

Regarding the test method, could you please build mvn bfs with code checked out before the "BFS approach" commit and run the performance test? This can help narrow down the root causes, either because of the BFS commit or commits before BFS.

This means the 1st case would be:

  • mvn 3.8.5 (resolver 1.6.x + wagon) -> mvn bfs (use last commit before BFS PR, here)

@cstamas
Copy link
Member

cstamas commented Mar 17, 2022

Project: Maven master 31193cbf0c93205a63c8c7b372b09200f60e69f4

Contenders:

  • mvn-385: vanilla Maven 3.8.5 release
  • mvn-df: maven-resolver master w/ reverted 69aeda6 commit -> collection is DF
  • mvn-bf: this PR (BF + skipper)

3 runs as before: 1st is with empty local repository, going against central directly.

mvn-385: mvn -Dmaven.repo.local=local-repo clean package -Drat.skip -Dtest=et -DfailIfNoTests=false
Total time: 01:59 min, 26.276 s, 26.868 s
Local repo: 4269 / 246680 bytes

mvn-df: ~/bin/apache-maven/maven-master-df/bin/mvn -Dmaven.repo.local=local-repo clean package -Drat.skip -Dtest=et -DfailIfNoTests=false
Total time: 01:16 min, 28.102 s, 27.797 s
Local repo: 4267 / 246336 bytes

mvn-bf: ~/bin/apache-maven/maven-master-bf/bin/mvn -Dmaven.repo.local=local-repo clean package -Drat.skip -Dtest=et -DfailIfNoTests=false
Total time: 01:16 min, 27.998 s, 28.542 s
Local repo: 4141 / 246792 bytes

mvn-bf w/ skipper disabled: ~/bin/apache-maven/maven-master-bf/bin/mvn -Dmaven.repo.local=local-repo clean package -Drat.skip -Dtest=et -DfailIfNoTests=false -Daether.dependencyCollector.useSkip=false
Total time: 01:16 min, 28.408 s, 28.454 s
Local repo: 4267 / 246336 bytes

@cstamas
Copy link
Member

cstamas commented Mar 17, 2022

@caiwei-ebay @michael-o @ibabiankou @jebeaudet IMO, this PR is good to be merged, so let's merge it.

I personally am not quite convinced about this (BFS + skipper), I'd need more tests, and would like to see how these "scale" as well (test on project with 100, 200, 400 modules and so on).

So, once merged, I'd like to implement following changes:

  • add indirection to DefaultDependencyCollector component (move the class from this PR to BFDependencyCollector, resurrect the DF one from master as DFDependencyCollector component)
  • introduce some config like aether.dependencyCollector.impl=dfs|bfs to select collector implementation
  • change skipper config to aether.dependencyCollecttor.bfs.skipper=true|false

I am aware there is still one incoming change (parallel POM download), and BFS is needed for it, but once it lands as well, we can prove (or prove the opposite) and just drop the simple "indirection". But while not there, having both in maven will greatly simplify testing, and give possibility for users to change collection (even if we leave it in resolver upon release).

For start, I plan just to "copy paste" the two collector components (one from here and one from master) that will most probably introduce quite some code duplication, but for now is fine. IF we decide to drop one, OR to keep both, we can clean up the duplication by refactoring (or just by dropping the one not needed anymore).

@michael-o
Copy link
Member

@caiwei-ebay @michael-o @ibabiankou @jebeaudet IMO, this PR is good to be merged, so let's merge it.

I personally am not quite convinced about this (BFS + skipper), I'd need more tests, and would like to see how these "scale" as well (test on project with 100, 200, 400 modules and so on).

So, once merged, I'd like to implement following changes:

* add indirection to DefaultDependencyCollector component (move the class from this PR to BFDependencyCollector, resurrect the DF one from master as DFDependencyCollector component)

* introduce some config like `aether.dependencyCollector.impl=dfs|bfs` to select collector implementation

* change skipper config to `aether.dependencyCollecttor.bfs.skipper=true|false`

I am aware there is still one incoming change (parallel POM download), and BFS is needed for it, but once it lands as well, we can prove (or prove the opposite) and just drop the simple "indirection". But while not there, having both in maven will greatly simplify testing, and give possibility for users to change collection (even if we leave it in resolver upon release).

For start, I plan just to "copy paste" the two collector components (one from here and one from master) that will most probably introduce quite some code duplication, but for now is fine. IF we decide to drop one, OR to keep both, we can clean up the duplication by refactoring (or just by dropping the one not needed anymore).

I fantastically support this. I'd like to hear @ibabiankou'Ss opinion as well.

@caiwei-ebay
Copy link
Contributor Author

@caiwei-ebay @michael-o @ibabiankou @jebeaudet IMO, this PR is good to be merged, so let's merge it.

I personally am not quite convinced about this (BFS + skipper), I'd need more tests, and would like to see how these "scale" as well (test on project with 100, 200, 400 modules and so on).

@michael-o @cstamas

Actually Skipper does not help with multi module project. Maven builds module one by one, this means Maven will call collectDependencies one by one for each module, and thus the cache (Args.pool, not a static one) won't be reused among the resolution of multiple modules. This means if we can reuse Args.pool (make map static & concurrent safe here), it should be faster when building multiple modules. I would like to try that in near future, maybe after @ibabiankou's PR.

Skipper only helps avoid unnecessary duplicate node resolution, it does least help for maven projects developed by maven experts like Spring as they have managed dependency versions very well and exclusions are rarely used. To print dependency:tree of entire spring-boot project (with large number of modules), it would take just 20s with my windows desktop.

To be frank, it is not a common case in Opensource or people using Opensource project, this is why I say this skipper solution is only helpful for large projects with complex dependencies (micro service tech is not employed, people rely on libraries developed by other team to call APIs provided by them).

The tests here actually demonstrate the case: same node with different exclusions, the 2nd one will be skipped as it is the loser node.

@cstamas
Copy link
Member

cstamas commented Mar 17, 2022

... or make it a component. Will discuss this with @gnodet as well, as mvnd keeps contaner (hence components) for longer, while mvn CLI only during run...

@cstamas
Copy link
Member

cstamas commented Mar 17, 2022

Created #160

@cstamas
Copy link
Member

cstamas commented Mar 18, 2022

Actually Skipper does not help with multi module project. Maven builds module one by one, this means Maven will call collectDependencies one by one for each module, and thus the cache (Args.pool, not a static one) won't be reused among the resolution of multiple modules. This means if we can reuse Args.pool (make map static & concurrent safe here), it should be faster when building multiple modules. I would like to try that in near future, maybe after @ibabiankou's PR.

RU sure about this? As pool is created out of session (DataPool pool = new DataPool( session );) and it uses RepositoryCache if present (and Maven sets it). Also, as I debugged build, the Args.pool does reuse caches, and they get existing instances pre-populated with values from previous calls. So to me, the caches seems reused during session life span...

EDIT: I missed your point, member DataPool.nodes is RE-CREATED.

@caiwei-ebay
Copy link
Contributor Author

caiwei-ebay commented Mar 18, 2022

@cstamas
Should I create a JIRA for the reuse of node children cache, like you found out, it don't need to be static (should be ConcurrentHashMap to support -T), just need to reuse that in constructor: DataPool pool = new DataPool( session );?

Another thing we could do later is to reverse versions (already reversed in the skipper PR) and add a break once at least one version has been resolved to speed up version range resolution which is for MRESOLVER-133. code here

@cstamas
Copy link
Member

cstamas commented Mar 23, 2022

@michael-o @caiwei-ebay @ibabiankou where are we with this PR? IMO, it should be safe to merge, especially as I mentioned, I plan to retain "old" (DFS) resolver as well, the separation works well (I will update or redo my PR as merge of this one with conflict).

@cstamas
Copy link
Member

cstamas commented Mar 23, 2022

@cstamas Should I create a JIRA for the reuse of node children cache, like you found out, it don't need to be static (should be ConcurrentHashMap to support -T), just need to reuse that in constructor: DataPool pool = new DataPool( session );?

Another thing we could do later is to reverse versions (already reversed in the skipper PR) and add a break once at least one version has been resolved to speed up version range resolution which is for MRESOLVER-133. code here

I tested that locally, and it miserably failed (resolver build passed, but building anything with mvn using altered resolver failed, usually with some dep not on classpath). To me it seems re-using nodes cache is a no-go, still unsure why....

My initial guess: due post-processing (like scope etc). So maybe we need to cache "raw" graph instead (but that would require a LOT of heap). Also, will look into at least carry-on caching of resolved versions, as we do that as well over and over again....

@michael-o
Copy link
Member

@michael-o @caiwei-ebay @ibabiankou where are we with this PR? IMO, it should be safe to merge, especially as I mentioned, I plan to retain "old" (DFS) resolver as well, the separation works well (I will update or redo my PR as merge of this one with conflict).

Will get back to this end of week.

@caiwei-ebay
Copy link
Contributor Author

caiwei-ebay commented Mar 24, 2022

@michael-o @caiwei-ebay @ibabiankou where are we with this PR? IMO, it should be safe to merge, especially as I mentioned, I plan to retain "old" (DFS) resolver as well, the separation works well (I will update or redo my PR as merge of this one with conflict).

I'm totally fine. Please go ahead with your proposals. Thanks!
As it is hard to show the benefits of skipper solution with simple or well designed opensource projects, I would like to create a project to demonstrate the slowness case later when I have time.

@caiwei-ebay
Copy link
Contributor Author

caiwei-ebay commented Mar 27, 2022

@michael-o @cstamas @jebeaudet @ibabiankou
As @cstamas pointed out, there is a slight but measurable performance downgrade with the BFS approach.

mvn-df: ~/bin/apache-maven/maven-master-df/bin/mvn -Dmaven.repo.local=local-repo clean package -Drat.skip -Dtest=et -DfailIfNoTests=false
Total time: 01:16 min, 28.102 s, 27.797 s
Local repo: 4267 / 246336 bytes

mvn-bf: ~/bin/apache-maven/maven-master-bf/bin/mvn -Dmaven.repo.local=local-repo clean package -Drat.skip -Dtest=et -DfailIfNoTests=false
Total time: 01:16 min, 27.998 s, 28.542 s
Local repo: 4141 / 246792 bytes

Below is the commit including some minor changes to reduce object creations and array copies which might be helpful to fix the slight performance downgrade:

6ec5508

As I don't have your test project, I was verifying it by running dependency tree of spring-boot project (mvn dependency:tree -o) and saw a bit improvement (17.7s -> 17.1s).

@caiwei-ebay
Copy link
Contributor Author

@michael-o @cstamas @jebeaudet
Created a sample project to demonstrate the maven resolver slowness when comes to resolve duplicate dependencies (same GAV) with different exclusions or version conflict dependencies. And also shared the performance test result w/ the BFS + Skipper patch in below repository.

https://github.com/caiwei-ebay/slowprojectdemo

@michael-o
Copy link
Member

michael-o commented Mar 31, 2022

@michael-o @cstamas @jebeaudet Created a sample project to demonstrate the maven resolver slowness when comes to resolve duplicate dependencies (same GAV) with different exclusions or version conflict dependencies. And also shared the performance test result w/ the BFS + Skipper patch in below repository.

https://github.com/caiwei-ebay/slowprojectdemo

I will try this tomorrow. Unfortunately, @ibabiankou is out of reach. If I don't hear any objections, I am going to merge this this weekend then @cstamas can work on top to create a switch between DFS and BFS.

@michael-o
Copy link
Member

Testing now...

@michael-o
Copy link
Member

michael-o commented Apr 3, 2022

Applied to Maven master:

DFS:
real    0m46,534s
user    3m22,501s
sys     0m9,949s

real    0m47,781s
user    3m28,036s
sys     0m9,140s

real    0m45,600s
user    3m28,505s
sys     0m9,094s

real    0m45,897s
user    3m22,993s
sys     0m9,688s

files 5956/size 117773603

BFS:
real    0m46,439s
user    3m29,663s
sys     0m9,719s


real    0m46,493s
user    3m28,344s
sys     0m10,211s

real    0m45,420s
user    3m25,507s
sys     0m9,739s

real    0m46,235s
user    3m22,838s
sys     0m9,855s

files 5910/117358698

BFS+Skip:
real    0m49,960s
user    3m32,234s
sys     0m9,616s

real    0m47,292s
user    3m27,262s
sys     0m9,852s

real    0m46,010s
user    3m26,432s
sys     0m9,429s

real    0m47,018s
user    3m28,777s
sys     0m9,604s

files 5742/117195446

@michael-o
Copy link
Member

Applied to the same project:

DFS:
real    0m8,572s
user    0m36,779s
sys     0m2,146s

real    0m8,836s
user    0m36,965s
sys     0m2,263s

real    0m9,503s
user    0m38,102s
sys     0m1,894s

files 3781/size 149475589

BFS:
real    0m9,197s
user    0m39,057s
sys     0m2,029s

real    0m8,990s
user    0m40,182s
sys     0m2,208s

real    0m10,089s
user    0m39,784s
sys     0m2,282s

real    0m9,368s
user    0m38,168s
sys     0m1,956s

files 3781/149475589

BFS+Skip:
real    0m7,626s
user    0m36,197s
sys     0m1,841s

real    0m7,854s
user    0m36,422s
sys     0m1,866s

real    0m7,691s
user    0m36,856s
sys     0m1,881s

files 3469/148963737

@michael-o
Copy link
Member

michael-o commented Apr 3, 2022

Measured with:

time /tmp/apache-maven-4.0.0-alpha-1-SNAPSHOT-$type/bin/mvn clean package -DskipTests -Dmaven.repo.local=repo-$type -Drat.skip

Maven with three modified Resolvers:

Apache Maven 4.0.0-alpha-1-SNAPSHOT (d92538b80f302fc40530468efe7ca7bf63b7ba52)
Maven home: /tmp/apache-maven-4.0.0-alpha-1-SNAPSHOT-dfs
Java version: 1.8.0_312, vendor: OpenJDK BSD Porting Team, runtime: /usr/local/openjdk8/jre
Default locale: de_DE, platform encoding: UTF-8
OS name: "freebsd", version: "12.3-stable", arch: "amd64", family: "unix"

CPU:

$ sysctl hw.model | grep Intel
hw.model: Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz

There is obviously a slight improvement, but not in my setup. I agree with @cstamas that DFS should stay default, both switchable until we get a clearer picture.

@caiwei-ebay
Copy link
Contributor Author

caiwei-ebay commented Apr 3, 2022

There is obviously a slight improvement, but not in my setup. I agree with @cstamas that DFS should stay default, both switchable until we get a clearer picture.

@michael-o @cstamas
Sure. Thank you!

Not sure if @ibabiankou has time to continue on the parallel downloading patch based on BFS approach. @ibabiankou Would you mind if I implement it for you?

@michael-o
Copy link
Member

@caiwei-ebay Can you first please pick up this PR #160 to make it coexist? I will merge this is a few moments.

@asfgit asfgit closed this in 0dd0693 Apr 3, 2022
@caiwei-ebay2
Copy link

caiwei-ebay2 commented May 8, 2022

@michael-o @cstamas @weibo1995 @ibabiankou

Echoed weibo1995's feedback in #172

At present, 5 or 6 long tail applications have been piloted, and the compilation time can be reduced by half, that is, about 100% performance gain. Later, we will use BF for more applications, and then feedback and communicate.
thanks.

Really glad that this patch could help more developers.

Also I'm currently working on parallel pom downloading, the idea is a bit different than https://github.com/ibabiankou/maven-resolver/pull/2/files:

  1. only parallelize the VersionRange and ArtifactDesciptor resolution part (poms & metadata.xml downloading in parallel), please check resolveArtifactDescriptorAsync method in below commit for more details.

Here is the commit for preview and the code is still evolving, I will certify the approach by dry-running large numbers of apps in our company, please share your comments with the idea.
parallel-pom-downloading@2c67552

Note: I'm resetting the 2FA auth of original "caiwei-ebay" account and unable to fire PR with "caiwei-ebay2" (getting message saying: It looks like this is your first time opening a pull request in this project!). Will fire draft PR once 2FA auth is reset and we can discuss there later.

cstamas pushed a commit that referenced this pull request Oct 26, 2022
Parallel POM downloading in DF collector.
- only parallelize the VersionRange and ArtifactDesciptor resolution part (poms.xml & maven-metadata.xml downloading in parallel) as the poms downloading or maven-metadata.xml is the most slow part.
- Pure dependency resolution logic and the [skip logic](#158) are still run in sequence.

---

https://issues.apache.org/jira/browse/MRESOLVER-7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants