scala2.10+lift2.5+NetBeans7.2

LiftとNetBeansをScala2.10向けにセットアップします。nbscalaのソースビルド手順など。


scala2.8.1+lift2.2(これでも1.5年前の最新)で制作した510classesのscalaコードがあるのですが、これをどのバージョンでリビルドするべきか検討していました。

世の中急速にscala2.8切りが進んでいるようだし、せめて2.9、できれば2.10。2月でJava6のアップデートも終わり。ちょっと急がないとやばいのではないか?IDEは、どうなんだ?という焦燥感にもかられつつ。

結論としては、Java7 + scala2.10 + lift2.5 + NetBeans7.2(nbscala) の最新環境に合わせる。手順を淡々と記述しますが、調査内容や考察などは最後に「余談」としてメモします。

JDK7 と Scala2.10 インストール

Java SE Downloads
Scala 2.10.0 now available!

Lift2.5M + Scala2.10 のセットアップ

Lift
GitHub lift/framework
1月16日にLift2.5-M4リリースとScala2.10対応が正式に告知されました。:assembla lift: Lift 2 5-M4 Released

現在最新の2.5-M3のリンクからダウンロードしたクイックスタート用のtarは、scala2.9用にセットアップされていますが、build.sbtに次の組み合わせを記述すればscala2.10ですぐ動作します(mavenリポジトリ上の最新は2.5-M4 末尾「余談1」参照)。

 scalaVersion := "2.10.0"
 val liftVersion = "2.5-M4"

NetBeans7.2 + Scala2.10 のセットアップ

GitHub dcaoyuan/nbscalaバイナリリリースはさほど活発ではないですが、開発は日々進んでいる!ので、このソースからビルドする方法をとります。

基本的にREADMEの"Build Instructions"の通りなのですが、ちょっと躓いた点などを補足しつつ手順書きます。

■ Mavenの設定ファイル(~/.m2/settings.xml)に追記(無ければ作成)します。

<settings>
 <profiles>
  <profile>
   <id>netbeans</id>
   <activation>
    <activeByDefault>true</activeByDefault>
   </activation>
   <properties>
    <nb.installation>c:/netbeans72-scala</nb.installation>
   </properties>
  </profile>
 </profiles>
</settings>

■ mvnコマンドのJVM環境

複数のJDKが混在している場合は、確実にJava7をポイントするように。
nbscalaのビルドでスタック不足になるので、JVMオプションをつけておく。

set JAVA_HOME="c:\java7"
set MAVEN_OPTS="-Xss2m"

■ ビルド

> mvn compile
> mvn nbm:autoupdate

で、updates.xmlや*.nbm ファイルが出来上がるので、
file:///c:/nbscala/target/netbeans_site/updates.xml
をNetBeansのプラグインリポジトリに追加すればScalaプラグインが選択できます(または「ダウンロード済みのプラグイン」から*.nbmをロード)。

■ NetBeansのJVMを確認

netbeans_install_dir/etc/netbeans.conf
で起動JVMをjava7に合わせ、メモリ関係を強くしておく。

netbeans_jdkhome="C:\java7"
netbeans_default_options="-J-Xss4m -J-Xmx950m -J-Xms950m -J-XX:PermSize=128m"

nbscalaをjava7でビルドしたのに、NetBeansをjava6で起動してしまうと、UnsupportedClassVersionErrorが出てしまいます。

以上。
今のところ、安定して動いていたNetBeans6.9+Scala2.8に比べて遜色なく動作しています。


以下、余談。

余談1:liftwebのバージョンとターゲットとなるscalaのバージョン

を、Mavenリポジトリからまとめてみました。

   lift
scala
2.12.22.32.42.5(Milestone)
2.7.7 o x x x x
2.8.0 o o o o x
2.8.1 x o o o x
2.8.2 x x x o x
2.9.0 x x x o x
2.9.1 x x x o o
2.9.2 x x x x o
2.10 x x x x o


余談2:

このバージョン構成に踏み切る一番の理由が、「使い慣れたNetBeansを使えればベスト」なのでnbscalaを覗いたところ、

Requirement - Build:
 Java 1.7 (for master branch)
 NetBeans 7.2

Branchs:
 master -- tracking Scala 2.10.x currently

と書いてあったので、もう一択で決まり。結局「最新を追うのが一番安定する」ということなのだろう。

運も良かった。この検証を始めるのが、Lift2.5-M4のリリース前(1月上~中旬)だったりしたら悶々としていたことは間違いない。Scala2.10リリースが1月8日だから、すごいスピードで環境が整っていることがわかる。

余談3:java7のmaxヒープ?

java6まではずっとこんな環境を持ち歩いていたのだが、

-Xmx2048m -Xms1024m -XX:PermSize=256m

なぜかjava7では、

JVM creation failed.
Error occurred during initialization of VM
Could not reserve enough space for object heap

が出てしまう。
512mではいけるみたいだ、1024mではだめみたいだ、768mでは? 900mでは? ...などと試して閾値探し当てた!

-Xmx950m (当環境 Windows7 32bit メモリ4GB)

・・・なんなのこの制限?


余談4: upgrade時のコンパイルエラーについて

最初は Scala2.9 + Lift2.5 でトライしたのだが、コンパイルは終わらない、エラーも表示されない、という状態に陥り、
原因を探る力もないので、Scala2.10を試すことにした。この時点で2.9は自分のscala歴には無かったことに。

Scala2.10 + Lift2.5でトライしたところ、
主にLift Mapperのこの悪魔のようなdeprecationにより、4000弱のwarningが吐き出された。たとえ果てしないエラーメッセージでも、反応がある方がうれしい。

↓こういうこと。

class Product extends LongKeyedMapper[Product] {
  object title extends MappedString(this,255)
}

//Lift2.4までは、MappedField[String] -> String の変換がかかる
val t : String = product.title

//Lift2.5からは、このimplicit conversionがdeprecatedなので、
val t : String = product.title.is //or "get"

つまり、至る所(3000箇所越え)に".is" を打ち込んでいくという苦行を行った。考えてみれば「これだけ無駄な変換処理が行われていたのだ」と思い直して心を落ち着けた。

その他、ポチポチエラーは出たが、型推論で失敗するようなところが多く、型を明記することで回避できるエラーがほとんどだった。(エラー原因までは探っていない、Scala2.10の勉強はこれから)。

余談5:他のIDEについて

Scala IDEはいちいちフルビルドが走ったりフリーズしたり、なぞのStackOverflowで使いものにならない感じでした。

IntelliJ IDEA12 Community EditionとScala + SBT プラグインも入れてみた。
安定して動くし、ぶっちゃけNetBeansより使いやすいか?と揺れそうになったが、NetBeansを使います。NetBeansでは開発が進まない!という状況に陥った時のための保険としてアンインストールしないでおいてあげる。

NetBeans + nbscala は、エラーが無くなった時にスチャっと色付くアノ瞬間がたまらないのです。


同じカテゴリのエントリ
1.Lift再入門 / 8.javascriptからsubmitできない / 7.Ajax Form / 6.Radio、Checkboxについて / 5.行列型の編集FORM / 4.サーバーサイドバリデーションとサーバサイド関数 / 3.ログインFORM - S.param使ったら負け / 2.Snippetメソッドとして許される型 / sbt0.12.xで依存jar抽出タスク / scala2.10+lift2.5+NetBeans7.2 / Scalaで入門関数プログラミング / reactive-webを試してみました / Lift2.2M1のテンプレート機能 / Scala Compiler Plugin / View Bound/Context Bound / ScalaZa01参加してきました / Akka Frameworkチュートリアルの次 / Akka Frameworkチュートリアルその2 / Akka Frameworkチュートリアル / LiftでJCaptcha / Url Rewrite Filter / sbt-android-plugin / Android SDK for Scala / 祝Lift2.0リリース / Liftの携帯対応まとめ / Scala2.8への移行 / Lift 2.0-scala280-SNAPSHOT/sbt0.7.1 / Scalaお絵かき環境 - Kojo / Lift+Quartzでバッチ / Scala&Liftを採用した理由 / Liftでdate_select系ヘルパーを作る / LiftでAjax / LiftのSubmitかしこい / lift-mapperのpaginateを使う / snippetをspecする / Lift Mapperを拡張する / LiftのDBをMySQLに / Liftプロジェクト環境を整える / Scala本読み比べてみました / NetBeans6.7&scala / じつはScalaはライトな言語 / Scalaバザ~ル / lift1.0所感 / specsを読む / implicit def / ScalaならNetBeansがサイコー / scala勉強会@東北がスタート / それでも俺はLiftをやるってのか / Scala&Liftセットアップ / ブログリニューアル /
コメント

コメントしてください

closed.