pet*_*erp 39 heap performance build gradle
我目前正在从我的多模块Web应用程序的ant转换为gradle,目前似乎当前版本的Gradle(M9)可能正在运行它的极限.但也许(希望)这只是一个问题,我不能理解Gradle的概念,或者不了解"魔术性能提升开关".我很高兴有关如何优化构建性能的任何暗示.
问题:在compileJava显示第一个问题之前经过几分钟,即使源中没有任何变化,该过程至少运行7分钟,直到它在中途崩溃:testClasses(在不同的子项目中),并显示以下消息:
* What went wrong:
Could not resolve all dependencies for configuration ':mysubproject_X:testRuntime'.
> Java heap space
Run Code Online (Sandbox Code Playgroud)
该项目由大约30个(部分相互依赖的)子项目组成,它们的build.gradle或多或少相同,用于从每个子项目构建jar文件,例如
sourceSets {
main {
java {
srcDirs 'src'
}
}
}
dependencies {
compile project(':mysubproject_A')
compile project(':mysubproject_B')
compile project(':mysubproject_E')
compile group: 'commons-lang', name: 'commons-lang', version: '2.2'
}
// copy all non-java files from src
copy {
from sourceSets.main.java.srcDirs
into "$buildDir/classes/main"
exclude '**/*.java'
}
jar {
}
Run Code Online (Sandbox Code Playgroud)
我试图通过将最大内存大小增加到1024M来解决堆空间问题,但它没有帮助.我的main build.gradle文件如下所示:
sourceCompatibility = 1.6
version = 0.5
useFindBugs = false
apply plugin: 'java'
configurations {
}
repositories {
mavenCentral()
mavenRepo url:"http://repository.jboss.org/maven2", artifactUrls: ["https://repository.jboss.org/nexus/content/repositories/public","http://opensource.55minutes.com/maven-releases"]
}
dependencies {
}
buildscript {
repositories {
mavenRepo url: 'http://gradle.artifactoryonline.com/gradle/plugins'
flatDir(dirs: "$projectDir/lib")
}
dependencies {
classpath "org.gradle.plugins:gradle-idea-plugin:0.3.1"
}
}
subprojects {
apply plugin: 'java'
apply plugin: 'idea'
repositories {
mavenCentral()
mavenRepo url:"http://repository.jboss.org/maven2", artifactUrls: ["https://repository.jboss.org/nexus/content/repositories/public","http://opensource.55minutes.com/maven-releases"]
}
dependencies {
testCompile 'junit:junit:4.8.2'
}
compileJava {
options.encoding = 'UTF-8'
options.fork (memoryMaximumSize: '1024m')
}
javadoc {
options.encoding = 'UTF-8'
}
test {
testReportDir = file(rootProject.testReportDir)
forkEvery = 1
jvmArgs = ['-ea', '-Xmx1024m']
}
}
dependsOnChildren()
task wrapper(type: Wrapper) {
gradleVersion = '1.0-milestone-9'
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*ser 58
您需要为Gradle JVM提供更多内存,而不是为编译任务/ JVM提供更多内存.一种方法是通过GRADLE_OPTS环境变量(GRADLE_OPTS=-Xmx512m).
Dav*_*son 25
如果使用的摇篮包装可以设置DEFAULT_JVM_OPTS在gradlew这样的:
DEFAULT_JVM_OPTS="-Xmx512m"
Run Code Online (Sandbox Code Playgroud)
gradlew.bat如果您在Windows上,请以类似的方式设置它:
set DEFAULT_JVM_OPTS=-Xmx512m
Run Code Online (Sandbox Code Playgroud)
还可以修改Gradle Wrapper任务以自动包含此任务.这就是Gradle开发人员解决它的方式:
wrapper {
gradleVersion = '1.8'
def jvmOpts = "-Xmx512m"
inputs.property("jvmOpts", jvmOpts)
doLast {
def optsEnvVar = "DEFAULT_JVM_OPTS"
scriptFile.write scriptFile.text.replace("$optsEnvVar=\"\"", "$optsEnvVar=\"$jvmOpts\"")
batchScript.write batchScript.text.replace("set $optsEnvVar=", "set $optsEnvVar=$jvmOpts")
}
}
Run Code Online (Sandbox Code Playgroud)
我刚刚发现了一个非常好的方法来处理这个问题.无需自定义gradle包装器或GRADLE_OPTIONS.
compileJava {
options.fork = true // Fork your compilation into a child process
options.forkOptions.setMemoryMaximumSize("4g") // Set maximum memory to 4g
}
Run Code Online (Sandbox Code Playgroud)
使用--info选项运行Gradle,以查看将参数用于最大内存大小的位置.
gradle build --info
Run Code Online (Sandbox Code Playgroud)
我使用以下版本的gradle.properties在Android项目中使Gradle性能更好
# The Gradle daemon aims to improve the startup and execution time of Gradle.
# When set to true the Gradle daemon is to run the build.
org.gradle.daemon=true
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
org.gradle.parallel=true
# Enables new incubating mode that makes Gradle selective when configuring projects.
# Only relevant projects are configured which results in faster builds for large multi-projects.
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand
org.gradle.configureondemand=true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66730 次 |
| 最近记录: |