我希望能够对我的每个项目POM进行分析,以确定每个直接依赖项引入了多少字节到结果包中,这取决于其所有传递依赖项的总和。
例如,如果依赖关系A引入B、C和D,则我希望能够看到一个摘要,显示A->总大小=(A+B+C+D)。
是否有现有的Maven或Gradle方法可以确定此信息?
我希望能够对我的每个项目POM进行分析,以确定每个直接依赖项引入了多少字节到结果包中,这取决于其所有传递依赖项的总和。
例如,如果依赖关系A引入B、C和D,则我希望能够看到一个摘要,显示A->总大小=(A+B+C+D)。
是否有现有的Maven或Gradle方法可以确定此信息?
这是一个针对你的 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上找到。
我在工作站上保留了一个小的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
命令,并检查生成的fat jar包的大小。在类Unix系统上,您可以使用du -h target/fat-standalone.jar
命令来完成该操作。
若要测试另一个maven artifact,只需更改上面模板中的groupId:artifactId
即可。
mvn dependency:get
已经弃用了将下载到自定义位置; mvn dependency:copy
不支持传递依赖项,而 mvn dependency:copy-dependencies
需要一个 pom.xml
文件,这使它至少与上述解决方案一样繁琐。 - Alex Yurshadef size = 0
configurations.myConfiguration.files.each { file ->
size += file.size()
}
println "Dependencies size: $size bytes"
No such property: size for class: org.gradle.api.internal.project.DefaultProject_Decorated Possible solutions: state, name
- M. Reza Nasirloo