Skip to content

Commit ddcd0c9

Browse files
committed
[SHRINKRES-305] [SHRINKRES-282] Resolve just a pom.xml
1 parent 76cddc1 commit ddcd0c9

4 files changed

Lines changed: 71 additions & 41 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ public Collection<MavenResolvedArtifact> resolveDependencies(final MavenResoluti
241241
this.getDependenciesForResolution().clear();
242242

243243
// apply post filtering
244-
return PostResolutionFilterApplicator.postFilter(resolvedArtifacts);
244+
return PostResolutionFilter.filter(resolvedArtifacts, depsForResolution, strategy);
245245
}
246246

247247
@Override

maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/PostResolutionFilterApplicator.java renamed to maven/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/PostResolutionFilter.java

Lines changed: 29 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -28,70 +28,61 @@
2828
import org.jboss.shrinkwrap.resolver.api.maven.ScopeType;
2929
import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependencies;
3030
import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency;
31-
import org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter;
31+
import org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy;
32+
import org.jboss.shrinkwrap.resolver.api.maven.strategy.NonTransitiveStrategy;
3233

3334
/**
34-
* An utility to apply pre and post filter on either a list of resolved dependencies (post filtering) or on a list of resolution
35-
* candidates (pre filtering)
35+
* A utility to apply post filter on a list of resolved dependencies (post filtering).
3636
*
3737
* @author <a href="mailto:kpiwko@redhat.com">Karel Piwko</a>
3838
*
3939
*/
40-
class PostResolutionFilterApplicator {
41-
private static final Logger log = Logger.getLogger(PostResolutionFilterApplicator.class.getName());
40+
class PostResolutionFilter {
41+
private static final Logger log = Logger.getLogger(PostResolutionFilter.class.getName());
4242

4343
/**
44-
* Run post-resolution filtering to weed out POMs.
44+
* Run post-resolution filtering to weed out unwanted POMs.
4545
*
4646
* @param artifactResults The original list of resolved artifacts
47+
* @param depsForResolution Resolutions for the request. Used for specifying unwanted POMs
48+
* @param strategy Resolution strategy
4749
* @return List of modified artifactResults
4850
*/
49-
static Collection<MavenResolvedArtifact> postFilter(final Collection<MavenResolvedArtifact> artifactResults) {
51+
static Collection<MavenResolvedArtifact> filter(final Collection<MavenResolvedArtifact> artifactResults, List<MavenDependency> depsForResolution, final MavenResolutionStrategy strategy) {
5052

51-
final MavenResolutionFilter postResolutionFilter = RestrictPomArtifactFilter.INSTANCE;
52-
final Collection<MavenResolvedArtifact> filteredArtifacts = new ArrayList<MavenResolvedArtifact>();
53-
final List<MavenDependency> emptyList = Collections.emptyList();
53+
final Collection<MavenResolvedArtifact> filteredArtifacts = new ArrayList<>();
5454

5555
for (final MavenResolvedArtifact artifact : artifactResults) {
5656
final MavenDependency dependency = MavenDependencies.createDependency(artifact.getCoordinate(),
5757
ScopeType.COMPILE, false);
5858
// Empty lists OK here because we know the RestrictPOM Filter doesn't consult them
59-
if (postResolutionFilter.accepts(dependency, emptyList, emptyList)) {
59+
if (PackagingType.POM.equals(dependency.getPackaging())) {
60+
if (log.isLoggable(Level.FINER)) {
61+
log.finer("Filtering out POM dependency resolution: " + dependency
62+
+ "; its transitive dependencies will be included");
63+
}
64+
// Keeping POM if specified in the resolution (G:A:pom:V) if only the POM should be resolved
65+
if (strategy.getClass().equals(NonTransitiveStrategy.class) && checkForPomInDependencies(dependency, depsForResolution)) {
66+
filteredArtifacts.add(artifact);
67+
}
68+
}
69+
else {
6070
filteredArtifacts.add(artifact);
6171
}
6272
}
6373
return Collections.unmodifiableCollection(filteredArtifacts);
6474
}
6575

66-
/**
67-
* {@link MavenResolutionFilter} implementation which does not allow POMs to pass through
68-
*
69-
* @author <a href="mailto:alr@jboss.org">Andrew Lee Rubinger</a>
70-
*/
71-
private enum RestrictPomArtifactFilter implements MavenResolutionFilter {
72-
73-
INSTANCE;
74-
75-
/**
76-
* {@inheritDoc}
77-
*
78-
* @see org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter#accepts(org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency,
79-
* java.util.List, java.util.List)
80-
*/
81-
@Override
82-
public boolean accepts(final MavenDependency coordinate, final List<MavenDependency> dependenciesForResolution, final List<MavenDependency> dependencyAncestors)
83-
throws IllegalArgumentException {
84-
if (PackagingType.POM.equals(coordinate.getPackaging())) {
85-
if (log.isLoggable(Level.FINER)) {
86-
log.finer("Filtering out POM dependency resolution: " + coordinate
87-
+ "; its transitive dependencies will be included");
88-
}
89-
90-
return false;
76+
private static boolean checkForPomInDependencies(final MavenDependency coordinate, final List<MavenDependency> dependenciesForResolution) {
77+
for (MavenDependency dependency : dependenciesForResolution) {
78+
if (coordinate.getGroupId().equals(dependency.getGroupId())
79+
&& coordinate.getPackaging().equals(dependency.getPackaging())
80+
&& coordinate.getArtifactId().equals(dependency.getArtifactId())
81+
&& coordinate.getClassifier().equals(dependency.getClassifier())) {
82+
return true;
9183
}
92-
return true;
9384
}
94-
85+
return false;
9586
}
9687

9788
}

maven/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/AsMavenResolvedArtifactTestCase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public void asSingleResolvedArtifactInfo() {
109109
}
110110

111111
/**
112-
* Poms are filtered out.
112+
* Poms are not filtered out when using the withoutTransitivity().
113113
*/
114114
@Test
115115
public void emptyResolvedListFromPom() {
@@ -125,7 +125,7 @@ public void emptyResolvedListFromPom() {
125125
.asResolvedArtifact();
126126

127127
// then
128-
assertEquals("resolved artifact infos list should be empty for pom dependency", 0, resolvedArtifactInfos.length);
128+
assertEquals("resolved artifact infos list should be empty for pom dependency", 1, resolvedArtifactInfos.length);
129129
}
130130

131131
/**

maven/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/PomDependenciesUnitTestCase.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,4 +277,43 @@ public void importTestOnlyDependencies() {
277277
new ValidationUtil("test-managed-dependency", "test-deps-b", "test-deps-k", "test-deps-l").validate(files);
278278
}
279279

280+
/**
281+
* Tests whether the POM is filtered if multiple dependencies should be resolved using the Non-transitivity strategy.
282+
*/
283+
@Test
284+
public void testPomResolutionInMultipleDependencies() {
285+
File[] file = Maven.resolver().loadPomFromFile("target/poms/test-remote-child.xml")
286+
.resolve("org.jboss.shrinkwrap.test:test-deps-c:pom:1.0.0", "org.jboss.shrinkwrap.test:test-deps-a:pom:1.0.0").withoutTransitivity().asFile();
287+
288+
new ValidationUtil("test-deps-c-1.0.0.pom", "test-deps-a-1.0.0.pom").validate(file);
289+
}
290+
291+
/**
292+
* Tests whether the POM is filtered if a single dependency should be resolved using the Non-transitivity strategy.
293+
*/
294+
@Test
295+
public void testPomResolutionInSingleDependency() {
296+
File[] file = Maven.resolver().loadPomFromFile("target/poms/test-remote-child.xml")
297+
.resolve("org.jboss.shrinkwrap.test:test-deps-c:pom:1.0.0").withoutTransitivity().asFile();
298+
299+
new ValidationUtil("test-deps-c-1.0.0.pom").validate(file);
300+
}
301+
302+
/**
303+
* Tests whether the POM is filtered out using the Transitivity strategy.
304+
*/
305+
@Test
306+
public void testPomResolutionWithTransitivity() {
307+
File[] file = Maven.resolver().loadPomFromFile("target/poms/test-remote-child.xml")
308+
.resolve("org.jboss.shrinkwrap.test:test-deps-c:pom:1.0.0").withTransitivity().asFile();
309+
310+
try {
311+
new ValidationUtil("test-deps-c-1.0.0.pom").validate(file);
312+
} catch (AssertionError e) {
313+
// AssertionError is expected since the pom dependency should not be present due to it being filtered
314+
} catch (Exception e) {
315+
Assert.fail();
316+
}
317+
}
318+
280319
}

0 commit comments

Comments
 (0)