我正在撰寫一個自定義 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").
uj5u.com熱心網友回復:
我寫了這段代碼,它產生了一些結果,雖然我不確定這是否正確。這似乎是完成作業。
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());
});
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/364745.html
