in tools/src/main/java/org/wildfly/swarm/tools/DependencyManager.java [147:217]
private void resolveDependencies(DeclaredDependencies declaredDependencies, boolean autodetect) throws Exception {
this.dependencies.clear();
// remove thorntail-runner dependencies, if some of them are needed, they should be re-added later
Collection<ArtifactSpec> explicitDependencies = new ArrayList<>(declaredDependencies.getDirectDependencies());
declaredDependencies.runnerDependency().ifPresent(runner -> {
filterOutRunnerDependencies(runner, explicitDependencies);
});
// resolve the explicit deps to local files
// expand to transitive if these are not pre-solved
boolean resolveExplicitsTransitively = !declaredDependencies.isPresolved() || autodetect;
Map<Boolean, List<ArtifactSpec>> partitioned = explicitDependencies.stream()
.collect(Collectors.partitioningBy(declaredDependencies::isComplete));
List<ArtifactSpec> complete = partitioned.get(true);
List<ArtifactSpec> incomplete = partitioned.get(false);
Collection<ArtifactSpec> resolvedIncompleteExplicitDependencies = resolveExplicitsTransitively ?
resolver.resolveAllArtifactsTransitively(incomplete, false) :
resolver.resolveAllArtifactsNonTransitively(incomplete);
Collection<ArtifactSpec> resolvedCompleteExplicitDependencies = resolver.resolveAllArtifactsNonTransitively(complete);
Collection<ArtifactSpec> resolvedExplicitDependencies = new LinkedHashSet<>();
resolvedExplicitDependencies.addAll(resolvedCompleteExplicitDependencies);
resolvedExplicitDependencies.addAll(resolvedIncompleteExplicitDependencies);
this.dependencies.addAll(resolvedExplicitDependencies);
Collection<ArtifactSpec> inputSet;
Collection<ArtifactSpec> resolvedTransientDependencies;
// resolve transitives if not pre-computed (i.e. from maven/gradle plugin)
if (declaredDependencies.getTransientDependencies().isEmpty()) {
inputSet = explicitDependencies;
Collection<ArtifactSpec> filtered = inputSet
.stream()
.filter(dep -> dep.type().equals(JAR)) // filter out composite types, like ear, war, etc
.collect(Collectors.toList());
resolvedTransientDependencies = resolver.resolveAllArtifactsTransitively(
filtered, false
);
this.dependencies.addAll(resolvedTransientDependencies);
} else {
// if transitive deps are pre-computed, resolve them to local files if needed
inputSet = declaredDependencies.getTransientDependencies();
Collection<ArtifactSpec> filtered = inputSet
.stream()
.filter(dep -> dep.type().equals(JAR))
.collect(Collectors.toList());
resolvedTransientDependencies = Collections.emptySet();
if (filtered.size() > 0) {
resolvedTransientDependencies = resolver.resolveAllArtifactsNonTransitively(filtered);
this.dependencies.addAll(resolvedTransientDependencies);
}
}
// add the remaining transitive ones that have not been filtered
Collection<ArtifactSpec> remainder = new ArrayList<>(inputSet);
remainder.removeAll(resolvedTransientDependencies);
this.dependencies.addAll(
resolver.resolveAllArtifactsNonTransitively(remainder)
);
// populate the dependency map for faster lookups
this.dependencies.forEach(s -> dependencyMap.put(s.mavenGav(), s));
}