@@ -227,13 +227,22 @@ def maven_impl(mctx):
227227 # module attempts to update a maven repo (which is normally undesired behaviour)
228228 repo_name_2_module_name = {}
229229
230- for mod in mctx .modules :
230+ # First compute the overrides. The order of the transitive overrides do not matter, but the root
231+ # overrides take precedence over all transitive ones.
232+ for idx , mod in enumerate (reversed (mctx .modules )):
233+ # Rotate the root module to the last to be visited.
234+ is_root_module = idx == (len (mctx .modules ) - 1 )
231235 for override in mod .tags .override :
232236 value = str (override .target )
233- current = overrides .get (override .coordinates , None )
234- to_use = _fail_if_different ("Target of override for %s" % override .coordinates , current , value , [None ])
235- overrides .update ({override .coordinates : to_use })
237+ if is_root_module :
238+ # Allow the root module's overrides to take precedence over any transitive overrides.
239+ to_use = value
240+ else :
241+ current = overrides .get (override .coordinates , None )
242+ to_use = _fail_if_different ("Target of override for %s" % override .coordinates , current , value , [None ])
243+ overrides .update ({override .coordinates : value })
236244
245+ for mod in mctx .modules :
237246 for artifact in mod .tags .artifact :
238247 _check_repo_name (repo_name_2_module_name , artifact .name , mod .name )
239248
0 commit comments