32
32
import java .util .Optional ;
33
33
import java .util .Properties ;
34
34
import java .util .Set ;
35
+ import java .util .concurrent .atomic .AtomicBoolean ;
35
36
import java .util .function .Predicate ;
36
37
import java .util .logging .Level ;
37
38
import java .util .logging .Logger ;
@@ -200,10 +201,12 @@ public MavenWorkingSession loadPomFromFile(File pomFile, Properties userProperti
200
201
private Collection <ArtifactResult > resolveProjectLocal (final List <MavenDependency > depsForResolution ,
201
202
Set <MavenDependency > additionalDependencies ) {
202
203
Collection <ArtifactResult > projectLocalDependencies = new ArrayList <>(depsForResolution .size ());
204
+ AtomicBoolean consumerPomFound = new AtomicBoolean ();
203
205
for (MavenDependency dependency : depsForResolution ) {
204
206
Path resolved = resolveProjectLocal (dependency .getGroupId (), dependency .getArtifactId (),
205
207
dependency .getVersion (), Optional .ofNullable (dependency .getClassifier ()),
206
- Optional .ofNullable (dependency .getPackaging ().getExtension ()), additionalDependencies );
208
+ Optional .ofNullable (dependency .getPackaging ().getExtension ()),
209
+ additionalDependencies , consumerPomFound );
207
210
if (resolved != null && resolved .toFile ().exists ()) {
208
211
Artifact artifact = new DefaultArtifact (dependency .getGroupId (), dependency .getArtifactId (),
209
212
dependency .getClassifier (), dependency .getPackaging ().getExtension (), dependency .getVersion (),
@@ -215,20 +218,20 @@ private Collection<ArtifactResult> resolveProjectLocal(final List<MavenDependenc
215
218
projectLocalDependencies .add (result );
216
219
}
217
220
}
218
- return projectLocalDependencies ;
221
+ return consumerPomFound . get () ? projectLocalDependencies : Collections . emptyList () ;
219
222
}
220
223
221
224
private Path resolveProjectLocal (String groupId , String artifactId , String version ,
222
225
Optional <String > classifier , Optional <String > extension ,
223
- Set <MavenDependency > additionalDependencies ) {
226
+ Set <MavenDependency > additionalDependencies , AtomicBoolean consumerPomFound ) {
224
227
Path projectLocalRepository = findProjectLocalRepository ();
225
228
if (projectLocalRepository == null ) {
226
229
return null ;
227
230
}
228
231
229
232
Predicate <String > isNotEmpty = s -> !s .isEmpty ();
230
233
processAdditionalDependencies (projectLocalRepository , groupId , artifactId , version ,
231
- additionalDependencies );
234
+ additionalDependencies , consumerPomFound );
232
235
233
236
return projectLocalRepository .resolve (groupId ).resolve (artifactId ).resolve (version )
234
237
.resolve (toVersionedArtifact (artifactId , version )
@@ -242,19 +245,26 @@ private static String toVersionedArtifact(String artifactId, String version) {
242
245
243
246
private void processAdditionalDependencies (Path projectLocalRepository , String groupId ,
244
247
String artifactId , String version ,
245
- Set <MavenDependency > additionalDependencies ) {
248
+ Set <MavenDependency > additionalDependencies ,
249
+ AtomicBoolean consumerPomFound ) {
246
250
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 ();
250
257
}
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 ();
253
262
transitiveDependencies .removeAll (additionalDependencies );
254
263
if (!transitiveDependencies .isEmpty ()) {
255
264
additionalDependencies .addAll (transitiveDependencies );
256
265
transitiveDependencies .forEach (dependency -> processAdditionalDependencies (projectLocalRepository ,
257
- dependency .getGroupId (), dependency .getArtifactId (), dependency .getVersion (), additionalDependencies ));
266
+ dependency .getGroupId (), dependency .getArtifactId (), dependency .getVersion (),
267
+ additionalDependencies , consumerPomFound ));
258
268
}
259
269
}
260
270
}
@@ -303,8 +313,12 @@ public Collection<MavenResolvedArtifact> resolveDependencies(final MavenResoluti
303
313
} else {
304
314
Set <MavenDependency > allDependencies = new LinkedHashSet <>(depsForResolution );
305
315
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
+ }
308
322
}
309
323
310
324
final CollectRequest request = new CollectRequest (MavenConverter .asDependencies (resolveFromRepository ,
0 commit comments