簡體   English   中英

Gradle 獲取所有依賴項的列表

[英]Gradle get a list of all dependencies

我正在為 ProGuard 編寫一個任務,我需要獲取項目中的所有依賴項,然后對其進行迭代。 我的意思是,我需要獲取子項目依賴項、所有轉換依賴項等等。

結果,我必須復制所有 compileOnly 依賴項,在此我需要排除傳遞依賴項中已經在編譯中的依賴項

簡單地說,我需要一個包含類似 class 的數組。 我怎樣才能得到它?

interface Dependency{
    String getArtifact();
    String getGroup();
    String getVersion();
    Scope getScope();
    File getJarFile();
}

如果您想查看項目中的所有依賴項,可以在 Android Studio 終端中使用此命令行:

./gradlew app:dependencies

您將能夠看到如下內容:

在此處輸入圖像描述

buildSrc

import org.gradle.api.artifacts.ResolvedArtifact;

public class DepName {
    public String id;
    public String scope;
    public String group;
    public String artifact;
    public String version;
    public String jarFile;
    public ResolvedArtifact resolvedArtifact;

    public DepName(ResolvedArtifact resolvedArtifact) {
        this.resolvedArtifact = resolvedArtifact;
        this.id = extractId(resolvedArtifact);
        String[] ids = this.id.split(":");
        this.group = ids[0];
        this.artifact = ids[1];
        this.version = ids[2];
        this.scope = "compileOnly";
        this.jarFile = resolvedArtifact.getFile().getAbsolutePath();
    }

    private String extractId(ResolvedArtifact resolvedArtifact) {
        String displayName = resolvedArtifact.getId().getDisplayName();
        return displayName.substring(displayName.indexOf("(")+1, displayName.length() -2);
    }

    @Override
    public String toString() {
        return "DepName{" +
                "id='" + id + '\'' +
                ", sc='" + scope + '\'' +
                ", g='" + group + '\'' +
                ", a='" + artifact + '\'' +
                ", v='" + version + '\'' +
                ", f='" + jarFile + '\'' +
                ", ra=" + resolvedArtifact +
                '}';
    }
}

build.gradle

def depNames = new ArrayList<DepName>()
allprojects {
    afterEvaluate {
        configurations.compileOnly.resolvedConfiguration.resolvedArtifacts.each {d ->
            depNames.add(new DepName(d))
        }
    }
}

task compileOnlyList {
    doLast {
        println("The compileOnlyList \n ---------")
        println(depNames)
    }

樣品 output

The compileOnlyList 
 ---------
[DepName{id=':my-jms:1.', sc='compileOnly', g='', a='my-jms', v='1.', f='/Users/projects/lib/my-jms-1.2.jar', ra=my-jms-1.2.jar (:my-jms:1.2)}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM