1

我想在 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 中设置内存使用情况,但它仍然无法正常工作。我有点卡在这里。

4

3 回答 3

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"

然后我添加了一个符合 POSIX 的contains函数

#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"
于 2012-12-26T18:21:37.990 回答
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"
于 2012-12-16T03:51:47.367 回答
-1

您正在使用哪些堆大小选项?这听起来像是您使用了错误的单位或将它们关闭。如果我这样做,我会收到相同的错误消息:

$ JAVA_OPTS=-Xmx2048 grails run-app
Error occurred during initialization of VM
Incompatible minimum and maximum heap sizes specified    

使用-Xmx2048M按预期工作。

于 2012-10-17T15:08:51.393 回答