如何获得Gradle项目的运行时依赖项以及坐标和JAR文件



我正在编写一个自定义Gradle任务,该任务需要迭代所有运行时依赖项(包括所有可传递依赖项(。我需要每个依赖项的组、名称和版本以及JAR的路径。

Gradle API似乎有一个ResolvedDependecy,但我不知道如何获得它们。https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/ResolvedDependency.html

与工件、模块和依赖项相关的术语似乎也相当棘手https://docs.gradle.org/current/userguide/dependency_management_terminology.html这让我相当困惑于如何穿越它?我的假设是,我需要使用getProject().getConfigurations().getByName("rutime")获得运行时配置。

我写了这段代码,它产生了一些结果,尽管我不确定这是否正确。这似乎是完成任务。

import java.util.Collection;
import java.util.function.Function;
import java.util.stream.Stream;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ResolvedDependency;
public class Dependencies {
private static <T> Stream<T> of(T node, Function<T, Collection<T>> childrenFn) {
return Stream.concat(Stream.of(node), childrenFn.apply(node).stream()
.flatMap(n -> of(n, childrenFn)));
}
private static Stream<ResolvedDependency> of(ResolvedDependency node) {
return of(node, ResolvedDependency::getChildren);
}
@SuppressWarnings("CodeBlock2Expr")
public static void doIt(Configuration configuration) {
configuration.getResolvedConfiguration()
.getFirstLevelModuleDependencies()
.stream()
.flatMap(Dependencies::of)
.flatMap(dependency -> {
return dependency.getModuleArtifacts().stream();
})
.distinct()
.forEach(artifact -> {
System.out.println(artifact.getFile());
});
}
}

最新更新