我希望能够对我的每个项目POM进行分析,以基于每个传递依赖项的所有传递依赖项之和确定每个直接依赖项将多少字节引入结果包中。
例如,如果依赖项A引入了B,C和D,我希望能够看到一个摘要,显示A->总大小=(A + B + C + D)。
是否存在确定此信息的现有Maven或Gradle方法?
我在工作站上保留了一个小的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
。
这是您的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上找到任务的最新版本>
我不知道显示总数的任何方法,但是您可能会为您的项目获得一份报告,其中可以显示每个依赖项大小的信息。请检查此Maven插件:http://maven.apache.org/plugins/maven-project-info-reports-plugin/dependencies-mojo.html
如果您的配置包含要计算大小的所有必需依赖项,则可以将以下代码片段简单地放入build.gradle文件中: