2012-10-16 86 views
1

我想在Jenkins中使用Grails插件。但每次生成失敗此消息:Jenkins&Grails:初始化VM時出錯

[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中設置內存使用情況,但它仍然無法工作。我有點卡在這裏。

回答

-1

您使用的是堆大小選項?這聽起來像你使用錯誤的單位或離開他們。如果我做了什麼這我得到同樣的錯誤消息:

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

使用-Xmx2048M按預期工作。

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

我不得不手動修改腳本/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"