My artifact seems to big to be deployed by maven.

2019-06-22 06:02发布

问题:

My maven 3.0.3 build has a -Xmx1G and -XX:MaxPermSize=500M set in Jenkins. however, when I do a deploy, I always get

java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2786)
    at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
    at sun.net.www.http.PosterOutputStream.write(PosterOutputStream.java:61)
    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.sonatype.aether.connector.wagon.WagonRepositoryConnector$PutTask.run(WagonRepositoryConnector.java:825)
    at org.sonatype.aether.connector.wagon.WagonRepositoryConnector.put(WagonRepositoryConnector.java:465)
    at org.sonatype.aether.impl.internal.DefaultDeployer.deploy(DefaultDeployer.java:278)
    at org.sonatype.aether.impl.internal.DefaultDeployer.deploy(DefaultDeployer.java:215)
    at org.sonatype.aether.impl.internal.DefaultRepositorySystem.deploy(DefaultRepositorySystem.java:480)
    at org.apache.maven.artifact.deployer.DefaultArtifactDeployer.deploy(DefaultArtifactDeployer.java:137)
    at org.apache.maven.plugin.deploy.AbstractDeployMojo.deploy(AbstractDeployMojo.java:167)
    at org.apache.maven.plugin.deploy.DeployMojo.execute(DeployMojo.java:188)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.jvnet.hudson.maven3.launcher.Maven3Launcher.main(Maven3Launcher.java:79)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)

Artifact to deploy is 283Mbig. what can I do to have it correctly deployed ?

回答1:

This issue is caused by this bug. As suggested in the link, simply use webdav to deploy.

Consider doing the following:

<project>
  [...]
  <build>
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-webdav</artifactId>
        <version>1.0</version>
      </extension>
    </extensions>  
    </plugin>
  </build>
  ...
  <distributionManagement>
    <site>
        <id>sample-project.website</id>
        <url>dav:https://dav.sample.com/sites/sample-project</url>
    </site>
  </distributionManagement>
  ...
</project>

I've had this issue before. I believe it happens only with artifacts with a size of >= 256 MB.

After switching to the webdav deployment method, you can also reduce your memory settings. (if you've specifically modified them just due to the memory issue during the deployment).



回答2:

This answer to say simply that @olamy was right : upgrading to maven 3.0.4 solved that issue.