Skip to content

Commit 121e033

Browse files
committed
enh: keep updated with maven 4 rc-2 consumer pom changes
1 parent 0d3d07f commit 121e033

File tree

2 files changed

+30
-13
lines changed

2 files changed

+30
-13
lines changed

README.md

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ The project primarily focuses on supporting Maven-based repository structures, e
1919
- **Maven**: Version 3.3.9 or newer.
2020
- **Gradle**: Version 3 or newer.
2121

22+
## Maven 4 Feature:
23+
- Add the following to your ~/.m2/maven.properties in order to run tests from
24+
within your project's submodules: `maven.consumer.pom=true` or add `-Dmaven.consumer.pom=true` to your Maven package command line.
2225

2326
## Adding ShrinkWrap Resolvers to Your Project
2427

maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java

+27-13
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.util.Optional;
3333
import java.util.Properties;
3434
import java.util.Set;
35+
import java.util.concurrent.atomic.AtomicBoolean;
3536
import java.util.function.Predicate;
3637
import java.util.logging.Level;
3738
import 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

Comments
 (0)