Gradles maven发布插件在发布大文件(350MB)时消耗堆(1GB)

Gradles maven发布插件在发布大文件(350MB)时消耗堆(1GB),gradle,out-of-memory,Gradle,Out Of Memory,我正在使用maven发布插件向Sonatype Nexus发布许多工件。大多数这些工件的大小都小于10Mb,并且都可以很好地发布 然而,其中一个伪影约为350Mb。当我试图发布它时,我得到了以下输出:我的雇主可能不喜欢我在网上发布的名字 Publishing to repository org.gradle.api.internal.artifacts.repositories.DefaultMavenArtifactRepository_Decorated@193cb40 [ant:null]

我正在使用maven发布插件向Sonatype Nexus发布许多工件。大多数这些工件的大小都小于10Mb,并且都可以很好地发布

然而,其中一个伪影约为350Mb。当我试图发布它时,我得到了以下输出:我的雇主可能不喜欢我在网上发布的名字

Publishing to repository org.gradle.api.internal.artifacts.repositories.DefaultMavenArtifactRepository_Decorated@193cb40
[ant:null] Deploying to http://blah:8081/nexus/content/repositories/snapshots/
Uploading: blah/blah/blah/blah/blah/1.3.888/blah-1.3.888.zip to repository remote at http://blah:8081/nexus/content/repositories/snapshots/
Transferring 349480K from remote
:publishReleaseArtifactPublicationToMavenRepository FAILED
:publishReleaseArtifactPublicationToMavenRepository (Thread[Daemon,5,main]) completed. Took 8.94 secs.

...

* What went wrong:
Execution failed for task ':publishReleaseArtifactPublicationToMavenRepository'.
> Java heap space

* Try:
Run with --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':publishReleaseArtifactPublicationToMavenRepository'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:296)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:86)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:148)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:105)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:85)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:81)
    at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:45)
    at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:32)
    at org.gradle.tooling.internal.provider.ConfiguringBuildAction.run(ConfiguringBuildAction.java:143)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:39)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:45)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:35)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.ReturnResult.execute(ReturnResult.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:71)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:69)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:69)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:60)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:45)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator.runCommand(DaemonStateCoordinator.java:184)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy.doBuild(StartBuildOrRespondWithBusy.java:49)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.HandleStop.execute(HandleStop.java:30)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.DaemonHygieneAction.execute(DaemonHygieneAction.java:39)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.CatchAndForwardDaemonFailure.execute(CatchAndForwardDaemonFailure.java:32)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.DefaultDaemonCommandExecuter.executeCommand(DefaultDaemonCommandExecuter.java:51)
    at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.handleCommand(DefaultIncomingConnectionHandler.java:155)
    at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.receiveAndHandleCommand(DefaultIncomingConnectionHandler.java:128)
    at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.run(DefaultIncomingConnectionHandler.java:116)
    at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
Caused by: java.lang.OutOfMemoryError: Java heap space
    at org.apache.maven.wagon.AbstractWagon.transfer(AbstractWagon.java:492)
    at org.apache.maven.wagon.AbstractWagon.transfer(AbstractWagon.java:457)
    at org.apache.maven.wagon.AbstractWagon.putTransfer(AbstractWagon.java:411)
    at org.apache.maven.wagon.AbstractWagon.transfer(AbstractWagon.java:392)
    at org.apache.maven.wagon.AbstractWagon.putTransfer(AbstractWagon.java:365)
    at org.apache.maven.wagon.StreamWagon.put(StreamWagon.java:163)
    at org.apache.maven.artifact.manager.DefaultWagonManager.putRemoteFile(DefaultWagonManager.java:317)
    at org.apache.maven.artifact.manager.DefaultWagonManager.putArtifact(DefaultWagonManager.java:227)
    at org.apache.maven.artifact.deployer.DefaultArtifactDeployer.deploy(DefaultArtifactDeployer.java:107)
    at org.apache.maven.artifact.ant.DeployTask.doExecute(DeployTask.java:125)
    at org.gradle.api.publication.maven.internal.ant.CustomDeployTask.doExecute(CustomDeployTask.java:39)
    at org.apache.maven.artifact.ant.AbstractArtifactTask.execute(AbstractArtifactTask.java:751)
    at org.gradle.api.publish.maven.internal.publisher.AbstractAntTaskBackedMavenPublisher.execute(AbstractAntTaskBackedMavenPublisher.java:110)
    at org.gradle.api.publish.maven.internal.publisher.AbstractAntTaskBackedMavenPublisher.publish(AbstractAntTaskBackedMavenPublisher.java:61)
    at org.gradle.api.publish.maven.internal.publisher.StaticLockingMavenPublisher.publish(StaticLockingMavenPublisher.java:38)
    at org.gradle.api.publish.maven.internal.publisher.ValidatingMavenPublisher.publish(ValidatingMavenPublisher.java:48)
    at org.gradle.api.publish.maven.tasks.PublishToMavenRepository$2.publish(PublishToMavenRepository.java:148)
    at org.gradle.api.publish.internal.PublishOperation.run(PublishOperation.java:37)
    at org.gradle.api.publish.maven.tasks.PublishToMavenRepository.doPublish(PublishToMavenRepository.java:142)
    at org.gradle.api.publish.maven.tasks.PublishToMavenRepository.publish(PublishToMavenRepository.java:133)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:218)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
我在VisualVM中观察了这个运行,看到在抛出这个异常之前,当我使用-Xmx1G运行时,堆从~100Mb快速地尖峰到>1Gb

堆转储表明内存是由lightweightHttpWang使用的sun.net.www.http.PosterOutputStream分配的

我在Gradle版本1.8、1.10和2.0中尝试过这一点

还有谁见过这个吗

有任何修复/解决方法吗

我的脚本如下所示:

apply plugin: 'maven-publish'

task publishAsZip(type: Zip) {
    if (!rootProject.hasProperty('releaseRoot')) {
        println 'The release root directory has not been specified - skipping task'
    } else {
        from new File(targetRoot, "files")
        baseName 'app'
        destinationDir  new File(releaseRoot, "Build $jenkinsBuildNumber")
        version  "${appVersion}-win-${jenkinsBuildNumber}"

        publishing {
            publications {
                releaseArtifact(MavenPublication) {
                    groupId 'blah.blah.blah'
                    artifactId 'blah-app'
                    version "1.3.${jenkinsBuildNumber}"
                    artifact publishAsZip
                }
           }
            repositories {
                maven {
                    credentials {
                        username 'deploymentUser'
                        password 'deploymentPass'
                    }
                    url "http://nexusserver:8081/nexus/content/repositories/snapshots/"
                }
            }
        }
    }
}

最后,我使用WebDav将其部署到Nexus:

apply plugin: 'java'
apply plugin: 'maven'

configurations {
    ...
    wagonJars
}

dependencies {
    ...
    wagonJars 'org.apache.maven.wagon:wagon-webdav-jackrabbit:2.7'
}

task buildRelease(type: Zip) {
    ...
}

artifacts {
    archives buildRelease
}

uploadArchives {
    repositories.mavenDeployer {
        configuration = configurations.wagonJars
        repository(url: 'dav:http://.../') {
            authentication(userName: '...', password: '...')
        }
        pom.groupId = '...'
        pom.artifactId = '...'
        pom.version = "..."
    }
}

我遇到了一个约270mb文件的问题。我通过将GradleRapper升级到gradle 2.11的最新版本来修复它。

找到解决方法了吗?找到了!看到我下面的答案…对,所以使用旧的maven插件而不是新的maven发布插件,谢谢。太好了!很高兴知道他们已经修好了。