使用 gradle 如何获取库的依赖树?

With gradle how to get the dependency tree of a library?

提问人:zeus 提问时间:11/9/2022 更新时间:11/9/2022 访问量:4746

问:

假设我想用gradd检索这个工件的依赖树:com.google.firebase:firebase-firestore:24.4.0

我该怎么办?

java maven gradle android-gradle-plugin build.gradle

评论

0赞 Nick 11/9/2022
这回答了你的问题吗?使用 Gradle 查找依赖关系树
0赞 zeus 11/9/2022
@Nick不,不是真的,我什至没有任何项目,我只想依赖com.google.firebase:firebase-firestore:24.4.0的依赖树,我不知道该怎么做。
0赞 Nick 11/9/2022
我已经写信给你,你可以使用该网站 stackoverflow.com/a/74235627/6066470

答:

0赞 Ben Borchard 11/9/2022 #1

如果它是项目的依赖项,您应该能够运行

gradle dependencies

并查看整个项目的依赖关系树(包括此项目的子树)

此问题的答案中提供了更多详细信息:使用 Gradle 查找依赖关系树

3赞 George 11/9/2022 #2

你不能这样做,aar 本身不包含任何依赖项信息。

此 aar 的所有信息都存储在 pom.xml 中,可以通过 google maven 存储库在此处找到

这只会告诉你命令会做什么,这些是传递依赖关系,意思是这个 aar 的直接依赖关系,默认情况下,Gradle 会自动解析它们。Gradle dependencies

pom.xmlcom.google.firebase:firebase-firestore:24.4.0

<?xml version='1.0' encoding='UTF-8'?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.google.firebase</groupId>
  <artifactId>firebase-firestore</artifactId>
  <version>24.4.0</version>
  <packaging>aar</packaging>
  <dependencies>
    <dependency>
      <groupId>androidx.annotation</groupId>
      <artifactId>annotation</artifactId>
      <version>1.1.0</version>
      <scope>compile</scope>
      <type>jar</type>
    </dependency>
    <dependency>
      <groupId>com.google.android.gms</groupId>
      <artifactId>play-services-base</artifactId>
      <version>18.0.1</version>
      <scope>compile</scope>
      <type>aar</type>
    </dependency>
  </dependencies>
  <name>firebase-firestore</name>
  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
</project>

这包括它有自己的pom.xmlcom.google.android.gmspom.xml

<?xml version='1.0' encoding='UTF-8'?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.google.android.gms</groupId>
  <artifactId>play-services-basement</artifactId>
  <version>18.1.0</version>
  <packaging>aar</packaging>
  <dependencies>
    <dependency>
      <groupId>androidx.collection</groupId>
      <artifactId>collection</artifactId>
      <version>1.0.0</version>
      <scope>compile</scope>
      <type>jar</type>
    </dependency>
    <dependency>
      <groupId>androidx.core</groupId>
      <artifactId>core</artifactId>
      <version>1.2.0</version>
      <scope>compile</scope>
      <type>aar</type>
    </dependency>
    <dependency>
      <groupId>androidx.fragment</groupId>
      <artifactId>fragment</artifactId>
      <version>1.0.0</version>
      <scope>compile</scope>
      <type>aar</type>
    </dependency>
  </dependencies>
  <name>play-services-basement</name>
  <licenses>
    <license>
      <name>Android Software Development Kit License</name>
      <url>https://developer.android.com/studio/terms.html</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
</project>

我想说的是,除非您使用自定义任务迭代流程并自己获取依赖项的 POM 文件,否则您只能使用命令来检查您的项目或模块使用的传递依赖项。gradle dependencies

更新:

您可以按照以下简单步骤轻松启动新的 gradle 项目。

  1. mkdir gradleExp
  2. cd gradleExp
  3. gradle init# 1.基础 1.时髦的随机名称
  4. 使用以下命令更新空值build.gradle
plugins {
    id 'java'
}
repositories {
    google()
    mavenCentral()
}

dependencies {
    implementation "com.google.firebase:firebase-firestore:24.4.0"
}
  1. gradle dependencies# 列出全部
  2. gradle dependencies --configuration compileClasspath# 减少输出以仅显示 编译源集 'main' 的类路径

注意:缺少任何一个或将在显示的结果中显示一些失败。google()mavenCentral()

评论

0赞 zeus 11/9/2022
是否可以创建一个仅包含我的依赖项的空项目来运行它 gradle 依赖项?如果是,怎么办?
1赞 George 11/9/2022
是的,我相信这很简单,我现在将更新我的答案。
0赞 zeus 11/18/2022
我的解决方案有一个奇怪的问题,我在这里打开了一个新的 SO,里面有这个问题:stackoverflow.com/questions/74482724/......
1赞 George 11/22/2022
我已经为您的问题添加了一个答案,现在应该可以正常工作了。