首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何加快慢速fatJAR任务?

如何加快慢速fatJAR任务?
EN

Stack Overflow用户
提问于 2016-04-15 10:20:45
回答 1查看 1.2K关注 0票数 1

以下部分是我的build.gradle文件的一部分:

代码语言:javascript
复制
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任务就需要大量时间:

代码语言:javascript
复制
[... 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更有时间效率吗?

EN

回答 1

Stack Overflow用户

发布于 2016-04-15 13:26:58

也许其他人会来告诉我我错了,但是国际海事组织5秒的时间不是不合理的建立一个法特罐子。定义的任务

  • 解压缩每个依赖项的jar文件,
  • 将解压缩文件与项目类文件合并,然后
  • 把所有东西重新包装到一个新的罐子里。

根据您有多少依赖项,5秒对我来说是相当好的。除非基本的Zip任务得到了某种程度的优化,否则我不会看到这个时间变化。

不过,有几件事你可以做:

  1. 您可以将fatjar任务从标准构建周期中移出,后者针对每个更改运行。只有在执行发行版时才能运行fatjar任务。在大多数情况下,您应该能够在本地测试更改,而不必构建fatjar,因为您有所有可用的依赖项。
  2. 对于一个文件更改,您将使用大量依赖jar进行解包重新打包操作。也许您可以编写一个优化的fatjar任务,解压缩旧的,替换修改后的文件并对其进行打包,从而减少所需的文件操作数量。

编辑:我刚刚查看了分级阴影罐插件,并意识到它完成了我前面描述的#2,对fatjar进行了渐进的更改,这将给您带来明显的性能改进。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36644500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档