[英]Gradle get a list of all dependencies
我正在為 ProGuard 編寫一個任務,我需要獲取項目中的所有依賴項,然后對其進行迭代。 我的意思是,我需要獲取子項目依賴項、所有轉換依賴項等等。
結果,我必須復制所有 compileOnly 依賴項,在此我需要排除傳遞依賴項中已經在編譯中的依賴項
簡單地說,我需要一個包含類似 class 的數組。 我怎樣才能得到它?
interface Dependency{
String getArtifact();
String getGroup();
String getVersion();
Scope getScope();
File getJarFile();
}
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.