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

Sha*_*ood 11 dependency-management gradle pom.xml maven

我希望能够对每个项目POM执行分析,以确定每个直接依赖项基于其所有传递依赖项的总和引入到生成的包中的字节数.

例如,如果依赖关系A带来B,C和D,我希望能够看到显示A - >总大小=(A + B + C + D)的摘要.

是否存在Maven或Gradle方法来确定此信息?

Med*_* V. 12

这是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)
    }
}
Run Code Online (Sandbox Code Playgroud)

该任务打印出所有依赖项的总和,并以kb的大小打印出来,按大小desc排序.

  • 不知道。但是,您可以享受任务的更新修订。现在它包含填充和输出看起来更棒了! (2认同)

Ale*_*sha 11

pom.xml在我的工作站上保留了一个小模板来识别重量级的依赖项。

假设您想查看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>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 谢谢,这是我找到的最接近的答案。我仍然无法相信没有合适的(内置)方法可以做到这一点。 (3认同)