3232import java .util .Optional ;
3333import java .util .Properties ;
3434import java .util .Set ;
35+ import java .util .concurrent .atomic .AtomicBoolean ;
3536import java .util .function .Predicate ;
3637import java .util .logging .Level ;
3738import java .util .logging .Logger ;
@@ -200,10 +201,12 @@ public MavenWorkingSession loadPomFromFile(File pomFile, Properties userProperti
200201 private Collection <ArtifactResult > resolveProjectLocal (final List <MavenDependency > depsForResolution ,
201202 Set <MavenDependency > additionalDependencies ) {
202203 Collection <ArtifactResult > projectLocalDependencies = new ArrayList <>(depsForResolution .size ());
204+ AtomicBoolean consumerPomFound = new AtomicBoolean ();
203205 for (MavenDependency dependency : depsForResolution ) {
204206 Path resolved = resolveProjectLocal (dependency .getGroupId (), dependency .getArtifactId (),
205207 dependency .getVersion (), Optional .ofNullable (dependency .getClassifier ()),
206- Optional .ofNullable (dependency .getPackaging ().getExtension ()), additionalDependencies );
208+ Optional .ofNullable (dependency .getPackaging ().getExtension ()),
209+ additionalDependencies , consumerPomFound );
207210 if (resolved != null && resolved .toFile ().exists ()) {
208211 Artifact artifact = new DefaultArtifact (dependency .getGroupId (), dependency .getArtifactId (),
209212 dependency .getClassifier (), dependency .getPackaging ().getExtension (), dependency .getVersion (),
@@ -215,20 +218,20 @@ private Collection<ArtifactResult> resolveProjectLocal(final List<MavenDependenc
215218 projectLocalDependencies .add (result );
216219 }
217220 }
218- return projectLocalDependencies ;
221+ return consumerPomFound . get () ? projectLocalDependencies : Collections . emptyList () ;
219222 }
220223
221224 private Path resolveProjectLocal (String groupId , String artifactId , String version ,
222225 Optional <String > classifier , Optional <String > extension ,
223- Set <MavenDependency > additionalDependencies ) {
226+ Set <MavenDependency > additionalDependencies , AtomicBoolean consumerPomFound ) {
224227 Path projectLocalRepository = findProjectLocalRepository ();
225228 if (projectLocalRepository == null ) {
226229 return null ;
227230 }
228231
229232 Predicate <String > isNotEmpty = s -> !s .isEmpty ();
230233 processAdditionalDependencies (projectLocalRepository , groupId , artifactId , version ,
231- additionalDependencies );
234+ additionalDependencies , consumerPomFound );
232235
233236 return projectLocalRepository .resolve (groupId ).resolve (artifactId ).resolve (version )
234237 .resolve (toVersionedArtifact (artifactId , version )
@@ -242,19 +245,26 @@ private static String toVersionedArtifact(String artifactId, String version) {
242245
243246 private void processAdditionalDependencies (Path projectLocalRepository , String groupId ,
244247 String artifactId , String version ,
245- Set <MavenDependency > additionalDependencies ) {
248+ Set <MavenDependency > additionalDependencies ,
249+ AtomicBoolean consumerPomFound ) {
246250 Path directory = projectLocalRepository .resolve (groupId ).resolve (artifactId ).resolve (version );
247- File pom = directory .resolve (toVersionedArtifact (artifactId , version ) + "-consumer.pom" ).toFile ();
248- if (!pom .exists ()) {
249- pom = directory .resolve (toVersionedArtifact (artifactId , version ) + ".pom" ).toFile ();
251+ File consumerPom = directory .resolve (toVersionedArtifact (artifactId , version ) + "-consumer.pom" ).toFile ();
252+ File buildPom = directory .resolve (toVersionedArtifact (artifactId , version ) + "-build.pom" ).toFile ();
253+ if (!consumerPom .exists () && buildPom .exists ()) {
254+ // in some versions of maven, consumer pom is just generated with ".pom" extension
255+ // in that case, build pom will also exist
256+ consumerPom = directory .resolve (toVersionedArtifact (artifactId , version ) + ".pom" ).toFile ();
250257 }
251- if (pom .exists ()) {
252- Set <MavenDependency > transitiveDependencies = loadPomFromFile (pom ).getParsedPomFile ().getDependencies ();
258+
259+ if (consumerPom .exists ()) {
260+ consumerPomFound .set (true );
261+ Set <MavenDependency > transitiveDependencies = loadPomFromFile (consumerPom ).getParsedPomFile ().getDependencies ();
253262 transitiveDependencies .removeAll (additionalDependencies );
254263 if (!transitiveDependencies .isEmpty ()) {
255264 additionalDependencies .addAll (transitiveDependencies );
256265 transitiveDependencies .forEach (dependency -> processAdditionalDependencies (projectLocalRepository ,
257- dependency .getGroupId (), dependency .getArtifactId (), dependency .getVersion (), additionalDependencies ));
266+ dependency .getGroupId (), dependency .getArtifactId (), dependency .getVersion (),
267+ additionalDependencies , consumerPomFound ));
258268 }
259269 }
260270 }
@@ -303,8 +313,12 @@ public Collection<MavenResolvedArtifact> resolveDependencies(final MavenResoluti
303313 } else {
304314 Set <MavenDependency > allDependencies = new LinkedHashSet <>(depsForResolution );
305315 projectLocalDependencies = resolveProjectLocal (depsForResolution , allDependencies );
306- resolveFromRepository = filterFromLocal (
307- allDependencies .stream ().collect (Collectors .toList ()), projectLocalDependencies );
316+ if (projectLocalDependencies .isEmpty ()) {
317+ resolveFromRepository = depsForResolution ;
318+ } else {
319+ resolveFromRepository = filterFromLocal (
320+ allDependencies .stream ().collect (Collectors .toList ()), projectLocalDependencies );
321+ }
308322 }
309323
310324 final CollectRequest request = new CollectRequest (MavenConverter .asDependencies (resolveFromRepository ,
0 commit comments