ARTIFACTORY:使用MAVEN_OPTS作为参数创建maven构建任务
有时我们会在构建过程中遇到OutOfMemoryError。当Java虚拟机(JVM)没有足够的可用内存分配给正在运行的Java程序时,就会发生此错误。
我们为ArtifactoryMaven任务指定的选项输入-DXms和-DXmx选项分别用于设置JVM的最小和最大堆大小。dmaxpermsize选项用于设置永久生成的最大大小,永久生成是堆的一部分,用于存储类和方法对象。
在下一个用例中,我们指定了最小堆大小为10 MB,最大堆大小为10 MB,以及最大永久生成大小为500 MB。根据程序的需求和系统上可用的资源,这些值可能不足以允许Java程序在不遇到OutOfMemoryError的情况下运行。2022世界杯阿根廷预选赛赛程您可以根据具体要求增加或减少它们。-DXms=10m -DXmx=10m -DMaxPermSize=500m
如何克服这个堆内存错误
为了解决这个问题,我们可以尝试增加堆大小和永久生成大小,看看这是否有助于解决错误。
此外,您可能需要考虑优化Java程序以减少其内存使用,例如通过减少正在创建和存储在堆中的对象的数量,或者通过使用内存效率更高的数据结构。
在将MAVEN_OPTS定义为具有所有任务范围的全局变量之后,我们可以克服堆内存错误。
在这里,我们将环境中的变量定义为下面共享的示例管道中的MAVEN_OPTS:-
示例管道片段:# Maven
#构建Java项目并使用Apache Maven运行测试。
添加分析代码、保存构建工件、部署等步骤;
# https://docs.microsoft.com/azure/devops/pipelines/languages/java
变量:
—名称:MAVEN_OPTS
value: '-Xms10m -Xmx10m -client -XX:MaxPermSize=500m -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -Xverify:none'
触发:
——主要
池:
vmImage: ubuntu-latest
步骤:
-任务:CmdLine@2
输入:
script: 'java -XX:+PrintFlagsFinal -version | grep -iE " HeapSize|PermSize|ThreadStackSize "
-任务:Bash@3
输入:
targetType:“内联”
脚本:'env | sort'
-任务:PowerShell@2
输入:
targetType:“内联”
脚本:|
$($env:MAVEN_OPTS)
-任务:JFrogMaven@1
输入:
mavenPomFile:“pom.xml”
目标:“安装”
-DXms=100m -DXmx=10m -DMaxPermSize=10m
artifactoryResolverService:“art2”
targetResolveReleaseRepo:“manu-libs-release”
targetResolveSnapshotRepo:“manu-libs-snapshot”
artifactoryDeployService:“art2”
targetDeployReleaseRepo:“manu-libs-release”
targetDeploySnapshotRepo:“manu-libs-snapshot”
collectBuildInfo:真
buildName:“$ (Build.DefinitionName) '
buildNumber:“$ (Build.BuildNumber) '
includeEnvVars:真
-任务:CmdLine@2
输入:
脚本:'env | sort'
-任务:PowerShell@2
输入:
targetType:“内联”
$($env:MAVEN_OPTS)"'
-任务:CmdLine@2
输入:
脚本:'java -XX:+PrintFlagsFinal -version | grep -iE " heapsize|permsize|threadstacksize " '
在maven人工任务中定义MAVEN_OPTS
如果您想将MAVEN_OPTS定义为ARTIFACTORY_MAVEN任务中的一个内部变量,我们已经在github中对此有一个特性请求https://github.com/jfrog/jfrog-azure-devops-extension/issues/373,并且正在等待修复。