Performance 如何加速慢速fatJAR任务?
以下部分是我的Performance 如何加速慢速fatJAR任务?,performance,gradle,gradle-2,Performance,Gradle,Gradle 2,以下部分是我的build.gradle文件的一部分: project(":App") { dependencies { compile(project(':Shared')) compile(project(':Subproject1')) compile(project(':Subproject2')) compile(project(':Subproject3')) compile(project(':S
build.gradle
文件的一部分:
project(":App") {
dependencies {
compile(project(':Shared'))
compile(project(':Subproject1'))
compile(project(':Subproject2'))
compile(project(':Subproject3'))
compile(project(':Subproject4'))
compile(project(':Subproject5'))
}
jar {
manifest {
attributes(
'Main-Class': 'com.my.App.Main',
)
}
}
// To run, use: $ gradle :App:fatJar
task fatJar(type: Jar) {
println "fatJarBuild(): 1"
manifest.from jar.manifest
println "fatJarBuild(): 2"
classifier = 'all'
println "fatJarBuild(): 3"
from {
configurations.runtime.collect {
println "fatJarBuild(): collect" + it.absolutePath
it.isDirectory() ? it : zipTree(it)
}
} {
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
println "fatJarBuild(): 4"
with jar
}
}
现在,每当我在代码库中稍微修改一个文件时,完成fatJar
任务都需要相当长的时间:
[... End of "./gradlew :App:fatJar --info" follows ... ]
:App:compileJava (Thread[Daemon worker Thread 13,5,main]) completed. Took 0.164 secs.
:App:processResources (Thread[Daemon worker Thread 13,5,main]) started.
:App:processResources
Skipping task ':App:processResources' as it is up-to-date (took 0.002 secs).
:App:processResources UP-TO-DATE
:App:processResources (Thread[Daemon worker Thread 13,5,main]) completed. Took 0.002 secs.
:App:classes (Thread[Daemon worker Thread 13,5,main]) started.
:App:classes
Skipping task ':App:classes' as it has no actions.
:App:classes (Thread[Daemon worker Thread 13,5,main]) completed. Took 0.0 secs.
:App:fatJar (Thread[Daemon worker Thread 13,5,main]) started.
:App:fatJar
Executing task ':App:fatJar' (up-to-date check took 0.003 secs) due to:
Input file /home/work/App/BrainThread.class has changed.
:App:fatJar (Thread[Daemon worker Thread 13,5,main]) completed. Took 5.993 secs.
BUILD SUCCESSFUL
Total time: 7.051 secs
Stopped 0 compiler daemon(s).
Received result Success[value=null] from daemon DaemonInfo{pid=30179, address=[c5e7f6f0-985b-48cc-88b0-ebc8aed7e75b port:33465, addresses:[/0:0:0:0:0:0:0:1%lo, /127.0.0.1]], idle=true, context=DefaultDaemonContext[uid=cc8b9da5-88b5-476a-9cf5-430af98f7f5a,javaHome=/usr/lib/jvm/java-8-openjdk-amd64,daemonRegistryDir=/home/user/.gradle/daemon,pid=30179,idleTimeout=10800000,daemonOpts=-XX:MaxPermSize=256m,-XX:+HeapDumpOnOutOfMemoryError,-Xmx1024m,-Dfile.encoding=UTF-8,-Duser.country=US,-Duser.language=en,-Duser.variant]} (build should be done).
您可以看到,BrainThread.class
被修改,结果一些重型机器启动了
我可以让我的
build.gradle
更省时吗?也许其他人会过来告诉我我错了,但我认为5秒的时间构建一个fatjar并不是不合理的。定义的任务
- 解压每个依赖项的jar文件
- 合并解包文件以及项目类文件,然后
- 将所有东西重新包装到一个新罐子中李>
编辑:我刚刚查看了,并意识到它完全符合我上面描述的#2,对fatjar进行了增量更改,这应该会给您带来明显的性能改进。为什么您的日志不包含任务定义中的所有println?我在上面的输出中禁用了它们。但是,从“fatJarBuild():1”到“fatJarBuild():4”只需半秒,因此这部分速度很快。我真的不知道如何调试“with jar”(因为我不确定我是否理解该命令)
with jar
使用默认jar任务的配置,它从项目中引入类。jar的实际构建是在默认的jar任务中完成的,您的所有时间都花在了这个任务上,这是无与伦比的。