我希望能够对每个项目POM执行分析,以确定每个直接依赖项基于其所有传递依赖项的总和引入到生成的包中的字节数。
例如,如果依赖关系A带来B,C和D,我希望能够看到显示A - >总大小=(A + B + C + D)的摘要。
是否存在Maven或Gradle方法来确定此信息?
我在工作站上保留了一个小的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>
然后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的大小打印出来,按大小desc排序。
如果您的配置包含您希望计算大小的所有必需依赖项,则可以将以下代码段放在build.gradle文件中:
def size = 0
configurations.myConfiguration.files.each { file ->
size += file.size()
}
println "Dependencies size: $size bytes"
在编译构建文件后运行任何gradle任务时,应该打印出来。
我不知道如何显示总计,但您可能会获得一个可以显示每个依赖项大小信息的项目报告。请检查这个maven插件:http://maven.apache.org/plugins/maven-project-info-reports-plugin/dependencies-mojo.html