Play 是 Java 的一個 Web Framework,聽聞強者說很強大,昨天就安裝來玩玩看。

昨天在 windows 上灌 play 2.2.1 ,環境變數等等都設定好之後,開啟熟悉的 git bash ,卻發現找不到 configuration file 錯誤如下:

Error during sbt execution: Could not find configuration file 'c:/usr/play-2.2.1/framework/sbt/sbt.boot.properties'.  Searched:
    file:/C:/Users/Lee/workspace/
    file:/C:/Users/Lee/
    file:/C:/usr/play-2.2.1/framework/sbt/

Google 了一下發現 舊版本2.0 就有的錯誤 play mail list

也發現在某一個 Pull Request 被解決了 github issue#1654,只是不懂為何沒有採用,只好自己來了。

修改 build 檔

  • 首先開啟 $playPath\play-2.2.1\framework\build 檔。

  • 在檔案裡找到這行

    build
    "$JAVA" ${DEBUG_PARAM} -Xms512M -Xmx1536M -Xss1M -XX:ReservedCodeCacheSize=192m -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=512M ${JAVA_OPTS} -Dfile.encoding=UTF-8 -Dplay.version="${PLAY_VERSION}" -Dplay.home=`dirname $0` -Dsbt.boot.properties=`dirname $0`/sbt/sbt.boot.properties ${PLAY_OPTS} -jar `dirname $0`/sbt/sbt-launch.jar "$@"
    
  • -Dsbt.boot.properties=`dirname $0`/sbt/sbt.boot.properties
    改為-Dsbt.boot.properties=$BOOTPROP`dirname $0`/sbt/sbt.boot.properties

修改 play 檔

  • 首先開啟 $playPath\play-2.2.1\play 檔。

  • 在程式碼 最前頭 加上這段 (完整檔案有點長就不貼了,詳情請見 github issue)

    play
    case `uname` in
    CYGWIN*)
    function dirname {
      cygpath -m `command dirname $@`
    }
    typeset -fx dirname
    export BOOTPROP="file:///"
    ;;
    MINGW32*)
    function dirname { (cd `command dirname $@`; pwd -W) }
    typeset -fx dirname
    export BOOTPROP="file:///"
    ;;
    *)
    export BOOTPROP=""
    ;;
    esac
    
  • 接著在檔案裡找到這行

    play
    "$JAVA" -Dplay.home=$dir/framework -Dsbt.boot.properties=$dir/framework/sbt/play.boot.properties ${PLAY_OPTS} -jar $dir/framework/sbt/sbt-launch.jar "$@"
    
  • -Dsbt.boot.properties=$dir/framework/sbt/play.boot.properties
    改為-Dsbt.boot.properties=$BOOTPROP$dir/framework/sbt/play.boot.properties

大功告成!!

測試

  • 在 git bash 上打 play help 有出現 play 的歡迎畫面就代表成功啦。

Reference