我想和Jenkins一起使用Grails插件。但是每个构建都会失败并显示以下消息:
[workspace] $ /usr/local/grails-2.1.1/bin/grails clean --non-interactive
Error occurred during initialization of VM
Incompatible minimum and maximum heap sizes specified
Build step 'Build With Grails' marked build as failure
当我从控制台运行命令时,它会在没有此Java错误的情况下执行。我尝试在GRAILS_OPTS中设置内存使用量,但它仍然无效。我有点被困在这里。
答案 0 :(得分:1)
cd /opt/grails/bin
查找说明的行:
GRAILS_OPTS="-server -Xmx718M -Xms718M -XX:PermSize=256m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8"
...并将其更改为:
GRAILS_OPTS="-server -Xmx512m -Xms512m -XX:PermSize=256m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8"
答案 1 :(得分:1)
我不得不手动修改/usr/share/grails/2.1.1/bin/startGrails
中的脚本来解决这个问题,因为该参数由Jenkins在JAVA_OPTS中传入并在GRAILS_OPTS中设置。
首先,我从GRAILS_OPTS中删除了参数:
GRAILS_OPTS="-server -Xmx768M -Xms768M -XX:PermSize=256m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8"
离开
GRAILS_OPTS="-server -XX:PermSize=256m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8"
然后我添加了a POSIX compliant contains
function:
#POSIX compliant contains implementation
#Usage string substring
contains() {
test "${1#*$2}" != "$1"
}
然后我添加了逻辑来重新添加大小(如果它们不存在)(b / c我也使用命令行中的grails) echo
语句当然只用于调试子>。请注意,这是对已传递文件的更改,如果您升级Grails,则可能必须重新创建。
JAVA_OPTS="$GRAILS_OPTS $JAVA_OPTS $AGENT"
echo "JAVA_OPTS: $JAVA_OPTS"
if ! contains "$JAVA_OPTS" -Xms && ! contains "$JAVA_OPTS" -Xmx
then
echo "Setting -Xms"
JAVA_OPTS="-Xms768M $JAVA_OPTS"
fi
if ! contains "$JAVA_OPTS" -Xmx
then
echo "Setting -Xmx"
JAVA_OPTS="-Xmx768M $JAVA_OPTS"
fi
echo "JAVA_OPTS: $JAVA_OPTS"
答案 2 :(得分:-1)
您使用的是哪种堆大小选项?这听起来像是你使用了错误的单位或让他们离开。如果我这样做,我会收到相同的错误消息:
$ JAVA_OPTS=-Xmx2048 grails run-app
Error occurred during initialization of VM
Incompatible minimum and maximum heap sizes specified
使用-Xmx2048M
按预期工作。