[ 
https://issues.apache.org/jira/browse/MRESOLVER-229?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17454942#comment-17454942
 ] 

wei cai commented on MRESOLVER-229:
-----------------------------------

My misunderstanding, maven downloads jars in parallel with max 5 threads but is 
partial, and MRESOLVER-7 did provide a parallel solution make use of full 
threads.

Regarding MNG-7129

I think MNG-7129 is different solution than my ticket, MNG-7129 is using 
similar solution like gradle enterprise maven extension, it would cache the 
plugins/tests execution result based on the principle that "if inputs does not 
change, then outputs should be identical."

This ticket is actually a quick win version of MRESOLVER-7, aims to solve the 
download slowness. MRESOLVER-7 is introducing papalism at maven-resolver's 
DefaultDependencyCollector, and this ticket is suggesting creating a new layer 
on top of DefaultDependencyCollector, it is like when maven starts to build, it 
would first call DefaultDependencyWarmup.warmup to warmup dependencies in 
parallel, and then call DefaultDependencyCollector.collectDependencies, when 
collectDependencies completes,  it would call 
DefaultDependencyWarmup.cacheUpdate to update cache.

The API call chain:

DefaultDependencyWarmup.warmup -> 
DefaultDependencyCollector.collectDependencies -> 
DefaultDependencyWarmup.cacheUpdate 

The flow of DefaultDependencyWarmup.warmup is like:
 * read .mvn/artifacts_cache.xml (the xml stores the GAV list required by the 
project like groupdId:artifactId:version;groupdId2:artifactId2:version2)
 * if yes, parallel resolve the artifactIds defined in artifacts_cache.xml 

 

The flow of DefaultDependencyWarmup.cacheUpdate is like:
 * update the GAV list to .mvn/artifacts_cache.xml  

 

> Improve the download speed by downloading poms & jars in parallel as a warm-up
> ------------------------------------------------------------------------------
>
>                 Key: MRESOLVER-229
>                 URL: https://issues.apache.org/jira/browse/MRESOLVER-229
>             Project: Maven Resolver
>          Issue Type: Improvement
>          Components: Resolver
>    Affects Versions: 1.7.1
>            Reporter: wei cai
>            Priority: Major
>
> We are tuning maven builds in our company, so far, we've made 2 big changes 
> that we think they can benefit the opensource community.
>  * maven-resolver change by a skip & reconcile approach
> https://issues.apache.org/jira/browse/MRESOLVER-228?filter=allopenissues
>  * download poms and jars in parallel ahead as a warm-up
> It is not a new issue that downloading dependencies in maven is slow. Similar 
> issues reported in:
> https://issues.apache.org/jira/browse/MRESOLVER-7
> Our solution is a bit different, basically we:
>  * Collect artifacts required for the project by listening to the maven 
> dependency resolve event and store as a artifacts.json (GAV list & its 
> repository ids) somewhere, in our case, we are storing the artifacts.json in 
> a backend service.
>  * Before maven build kick starts, we called the maven-resolver api 
> (DefaultDependencyCollector) to resolve all artifacts in artifacts.json in 
> parallel.
>  * After warm-up completed, let maven still build the project as normal. This 
> means even something missed in artifacts.json, maven could still find the 
> missing part and resolve them.
> This solution does not help for the very 1st build as no artifacts.json is 
> built yet, however for any future builds, download can happen in parallel and 
> thus it would be very quick.
> This solution helps speed up the maven builds in below cases:
>  * All CI builds
>  * New hires or new machines as there is no local maven repo cache
>  * Snapshot updates
>  * When a new dependency added, especially for a dependency having lots of 
> transitive dependencies
>  * Version upgrade such as Spring boot version upgrade
> [~michael-o] 
> As a opensource solution, may be we can store the artifacts.json to .mvn in 
> the git repository root, in this way, the artifacts list cache goes with the 
> code.
> Please share your comments with this solution.
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to