Maven / Gradle方法来计算包含所有传递依赖的依赖的总大小

问题描述 投票:12回答:4

我希望能够对我的每个项目POM进行分析,以基于每个传递依赖项的所有传递依赖项之和确定每个直接依赖项将多少字节引入结果包中。

例如,如果依赖项A引入了B,C和D,我希望能够看到一个摘要,显示A->总大小=(A + B + C + D)。

是否存在确定此信息的现有Maven或Gradle方法?

maven gradle pom.xml dependency-management
4个回答
4
投票

我在工作站上保留了一个小的pom.xml模板,以标识heavy-weight依赖项。

假设您想查看org.eclipse.jetty:jetty-client的权重及其所有传递对象,请在新文件夹中创建它。

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>not-used</groupId>
  <artifactId>fat</artifactId>
  <version>standalone</version>

  <dependencies>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-client</artifactId>
      <version>LATEST</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
          <execution>
           <phase>package</phase>
           <goals>
              <goal>shade</goal>
           </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

然后将cd移至该文件夹并运行mvn package并检查生成的胖子罐的大小。在类似Unix的系统上,您可以使用du -h target/fat-standalone.jar

为了测试另一个Maven工件,只需在上述模板中更改groupId:artifactId


13
投票

这是您的build.gradle的任务:

task depsize  {
    doLast {
        final formatStr = "%,10.2f"
        final conf = configurations.default
        final size = conf.collect { it.length() / (1024 * 1024) }.sum()
        final out = new StringBuffer()
        out << 'Total dependencies size:'.padRight(45)
        out << "${String.format(formatStr, size)} Mb\n\n"
        conf.sort { -it.length() }
            .each {
                out << "${it.name}".padRight(45)
                out << "${String.format(formatStr, (it.length() / 1024))} kb\n"
            }
        println(out)
    }
}

此任务将打印出所有依赖项的总和,并以kb为单位打印出来,并按大小说明排序。

更新:可以在github gist上找到任务的最新版本>


1
投票

我不知道显示总数的任何方法,但是您可能会为您的项目获得一份报告,其中可以显示每个依赖项大小的信息。请检查此Maven插件:http://maven.apache.org/plugins/maven-project-info-reports-plugin/dependencies-mojo.html


1
投票

如果您的配置包含要计算大小的所有必需依赖项,则可以将以下代码片段简单地放入build.gradle文件中:

© www.soinside.com 2019 - 2024. All rights reserved.