yan's Handicraft

作成したフリーソフトを公開
Home » scala » Archive by category 'sbt'

Windows環境で Linux ぽく Scalatra をセットアップする

5月 12th, 2013 Posted in sbt, scala, Scalatra

Windows環境でシェルを動かす最もポピュラーな方法は Cygwin だとおもいますが、 Cygwinはインストールも大げさで自力でセットアップする部分が多いと思います。
「GitHub for Windows」を使えばシェルが動くようになり、 gitもお手軽に利用できるので「GitHub for Windows」をつかって、 scaratra を セットアップしてみたいと思います。

事前準備


事前にインストールしておくもの

  • JDK1.7(Java SE7)
  • GitHub for Windows
    • GitHub for Windows の以下を設定しておいてください
      1. toolsoptions... を選ぶ
      2. default shellGit Bash をクリックして選択状態にする
      3. UPDATE ボタンをクリックして保存

Windowsの環境変数を設定しておくもの

windowsの環境変数 PATH に設定するもの

  • c:\Users\<ユーザID>\bin
  • <Jdkインストールディレクトリ>\bin

windowsのシンボリックリンクを作成する

これをやっておかないと、あとの作業でつまづきます。
(Git Shellが提供するコマンドでは windowsのパスとUnixぽいパスをうまくだましてくれるのですが、
javaに渡す引数はそのまま渡されてしまうようなので、シンボリックリンクで何とかしようという対応策です)

  1. コマンドプロンプトを管理者として起動します
  2. mklink /D c:\c c:\ を実行します。(cというディレクトが、cドライブ直下となるようにする)

Git Shell でLinuxぽく作業する


Conscript をインストール

以下のコマンドを実行します

cd ~;
curl https://raw.github.com/n8han/conscript/master/setup.sh | sh

動作確認

  • cs --version コマンドを実行して、色々ダウンロードされたあと、ヴァージョンと、Usage が表示されれば成功

giter8 をインストール

以下のコマンドを実行します

cs n8han/giter8
  • これでセットアップしてくれるのですが、 bin/g8.bat が作られて、 そのままでは、Git Shell でg8コマンドが実行できないです。
    仕方ないので、bin/g8.batを参考に bin/g8 ファイルを作成します。 (以下をテキストエディタで作成)
#!/bin/sh
java ${CONSCRIPT_OPTS} -Xmx1G -jar "${HOME}/.conscript/sbt-launch.jar" "@file:///C:/Users/yanagawa.h/.conscript/n8han/giter8/g8/launchconfig" "$@"

動作確認

  • g8 コマンドを実行して、色々ダウンロードされたあと、ヴァージョンと、Usage が表示されれば成功

新しい scaratra プロジェクトを作成する

  • プロジェクトを作成するディレクトリを予め作成して、そのディレクトリに移動します。
    (たとえば以下のような感じで)
cd ~;
mkdir newPrj
cd newPrj
  • 以下を実行して新規プロジェクトを作成します
g8 scalatra/scalatra-sbt
  • 対話的に入力を求められるので、以下のような感じで入力していきます
organization [com.example]: jp.que.ti
package [com.example.app]: sample
name [My Scalatra Web App]: foo
scalatra_version [2.2.0]:
servlet_name [MyScalatraServlet]:
scala_version [2.10.0]: 2.10.1
version [0.1.0-SNAPSHOT]: 0.0.1-SNAPSHOT

Template applied in .\foo
  • name が作成されるディレクトリになります。 (参考:scaratra本家の説明 なんとなく直観で何を入れれば分かるかとは思いますが、詳しいことは本家サイトの説明を! )
  • これで、scaratra の新規プロジェクトが作成されました
  • 各種設定ファイルをバージョン管理システムに投入したくなければ、 このあたりでコミットするのが良いらしい。 ( 参考:3分でsbtとEclipseに対応したScalaプロジェクトを作る )

scaratra プロジェクトをビルドする

  • プロジェクトディレクトリで実行すれば完了
sbt

Webアプリケーションを起動する

container:start

動作確認

  • localhost:8080/ にアクセスして、 「Hello, world!」が表示されれば成功
  • ソースの変更をソースに反映させたい場合は、以下も実行
~ ;copy-resources;aux-compile
  • サーバーを止める場合は以下
container:stop

warファイルを作成する

  • sbt コマンド待ちの状態で、以下を実行します。(<プロジェクトディレクトリ>/target/scala-2.10 以下に作成されます )
package

Eclipse用の設定ファイルを作成する

  • plugins.sbt に sbteclipse-plugin の依存ライブラリを追記します
    cd <プロジェクト名> としてから (今回の例では cd foo) 以下を実行します。 ( 参考:本家のIDEサポートページ )
cat <<'EOF' >> project/plugins.sbt


addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.2.0")
EOF

  • 最新バージョンは sbteclipse のサイト(GitHub) で確認してください
  • sbt コマンド待ちの状態で、以下を実行します。( .project@ と.classpath` ファイルができる)
eclipse

IntelliJ IDEA用の設定ファイルを作成する

  • plugins.sbt に sbt-idea プラグインの依存ライブラリを追記します
    cd <プロジェクト名> としてから (今回の例では cd foo) 以下を実行します。 ( 参考:本家のIDEサポートページ )
cat <<'EOF' >> project/plugins.sbt


addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.4.0")
EOF

gen-idea


追記

最初はうまくいっていた、scalatra の新規プロジェクト作成ですが、
エラーが発生するようになったしまいました。
(原因解明できていません。いろいろ環境いじっていたので、何がきっかけかもよくわからず。。。)
Windowsでsbtを使っていると、なぜかハマることが多いような気がします。

$ g8 scalatra/scalatra-sbt
java.lang.IllegalArgumentException: Invalid wildcards +refs/pull/*/head:refs/remotes/origin/pr/*
        at org.eclipse.jgit.transport.RefSpec.(RefSpec.java:142)
        at org.eclipse.jgit.transport.RemoteConfig.(RemoteConfig.java:176)
        at org.eclipse.jgit.api.CloneCommand.fetch(CloneCommand.java:151)
        at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:121)
        at giter8.Apply$class.clone(apply.scala:38)
        at giter8.Giter8.clone(giter8.scala:3)
        at giter8.Apply$class.inspect(apply.scala:21)
        at giter8.Giter8.inspect(giter8.scala:3)
        at giter8.Giter8.ghInspect(giter8.scala:48)
        at giter8.Giter8.run(giter8.scala:24)
        at giter8.Giter8.run(giter8.scala:12)
        at giter8.Giter8.run(giter8.scala:3)
        at xsbt.boot.Launch$.run(Launch.scala:55)
        at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:45)
        at xsbt.boot.Launch$.launch(Launch.scala:69)
        at xsbt.boot.Launch$.apply(Launch.scala:16)
        at xsbt.boot.Boot$.runImpl(Boot.scala:31)
        at xsbt.boot.Boot$.main(Boot.scala:20)
        at xsbt.boot.Boot.main(Boot.scala)
Error during sbt execution: java.lang.IllegalArgumentException: Invalid wildcards +refs/pull/*/head:refs/remotes/origin/pr/*

android-plugin は git コマンド発行するの?

12月 3rd, 2011 Posted in android, PC/システム開発, sbt, scala, 作業メモ

android-plugin をアップデートして

 g8 jberkel/android-app

したら”git”コマンドを発行するようで、windowsでうごかなくなった。

“git”なんて、コマンドプロンプトで動かないよ。。。

scala andoroid windows の組み合わせは、はまりどこと多すぎなので、
しょうがなく、 linux 環境つくって開発することにします。。。。 面倒です。

しょうがなく、virtualbox 入れた、ubuntu 11.10 インストールして、
環境構築し。

virtualbox のシームレスモードは結構いい感じだということがわかったので、
いいことにする。

sbt0.11に依存ライブラリやMavenリポジトリを追加

11月 27th, 2011 Posted in android, PC/システム開発, sbt, scala, 作業メモ

依存ライブラリ、Mavenリポジトリの追加

sbtのこのあたりの https://github.com/harrah/xsbt/wiki/Getting-Started-Basic-Def をみると、 拡張子が .sbt のファイルを、ホームディレクトリに聞くと書いてありました。 それに従うと以下のような感じです

resolvers += "jp.que.ti - yhj repository" at "http://yangiya.github.com/mavenrep"

libraryDependencies += "org.slf4j" % "slf4j-android" % "1.6.1-RC1"

libraryDependencies += "jp.que.ti.y_s_util" % "ysu_io" % "0.0.1-SNAPSHOT"

リポジトリの追加は “resolvers” 、ライブラリの追加は “libraryDependencies” に追加していけば 追加できました。

sbteclipse を android-plugin に適用して eclipse で編集する

11月 11th, 2011 Posted in android, sbt, scala, 作業メモ

Windowsで実施する前提で書きます

先日紹介した

sbt0.11を使ってscala androidプロジェクトをデプロイする の scala android プロジェクトを eclipse で編集できるようにします。

sbteclipse を使って、 eclipse 設定ファイルを生成しますが、 『こうなってくれたら』とは少し設定が違ってしまうので、 sbteclipse 適用後に手動で直すことにします。

sbteclipse を適用する前に、作成した scala androidプロジェクトの “project\build.scala”

scalaVersion := "2.9.0.1", 

の部分を、自分が使いたい scala のバージョンにあわせておきましょう。 (あわせておかないとうまく動きません)

sbteclipse について説明されているサイト

https://github.com/typesafehub/sbteclipse

sbteclipse をプロジェクトに適用

  1. scala android のプロジェクトディレクトリを[PRJ_HOME]として、 [PRJ_HOME]/project/plugins/build.sbt を編集する 一番最後の行に以下を追加する。(1行毎に改行必要なことに注意)
    resolvers += Classpaths.typesafeResolver
    
    addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse" % "1.4.0")
  2. コマンドプロンプトで [PRJ_HOME] を開き、 “sbt”実行し、sbtコマンド待ちにする
  3. “eclipse create-src” を実行すると、eclipse 設定ファイルが生成されます。 (以下のようなエラーがコマンドプロンプトに表示されましたが、今は放置します。エラーの意味がわかりません)
    [error] a module is not authorized to depend on itself: [プロジェクト名]#[プロジェクト名]_2.9.1;0.1
    [error] {file:[プロジェクトのパス]}tests/*:update: java.lang.IllegalArgumentException: a module is not authorized to depend on i tself: [プロジェクト名]#[プロジェクト名]_2.9.1;0.1
    [error] Error running externalDependencyClasspath task for tests
  4. eclipse で[PRJ_HOME]を開く。New Project で Scala Project を選択し、「Use default location」のチェックをはずして、[PRJ_HOME]を開く。
  5. eclipseでプロジェクト Java Builde Path の Source タブで 以下を削除
    src\main\resources
    src\test\resources

    以下を追加

    src\main\res
  6. 以下のディレクトリは不要なので削除
    src/main/resources
  7. eclipseでプロジェクト Java Builde Path の Libraries タブで以下を追加
    target[scalaバージョン]\classes

    また、Order and Export タブで、”target[scalaバージョン]\classes”の優先潤を最下位(一番下)にする。 このフォルダをクラスパスに設定するのは、scala android プラグインが “R.class”や”TR.class”を自動的に生成してくれるから。 よって、リソースを変更した場合は、

    sbt android:package-debug

    を再実行して、eclipse のプロジェクトを最新化する必要がある。 res/layout/.xml のような定義も、型安全にアクセスできます。

    参考サイト sbt-android-pluginで型安全にリソース取得

sbt0.11を使ってscala androidプロジェクトをデプロイする

10月 30th, 2011 Posted in android, sbt

Windowsで実施する前提で書きます

「jberkel/android-plugin」 https://github.com/jberkel/android-plugin に説明されている方法に従って対応していきます。

以下がすでに動く状態になっていることが前提です。

Conscript のインストール

Conscript は、scala のプログラムをインストールしたりアップデートする ツールのようです。

Conscriptについて説明されているサイト

How To

  1. “conscript-?.?.?.jar” をダウンロードする。(2011-10-29時点は conscript-0.3.2.jar ) ダウンロードのリンクは、上に書いた「 Conscriptのページ」の 「Installation」の辺の”Download the conscript runnable jar”
  2. “conscript-?.?.?.jar”を適当なディレクトリに格納。(以後、%CONSCRIPT_HOME%と呼ぶ)
  3. “%USERPROFILE%\bin” にpathを通す。(ここに、Conscript がインストールされる)
  4. java -jar conscript-0.3.2.jar を実行する。 おじさんの絵が描かれたPOPアップが表示され、 うまくいけば以下が表示される
     Success ! cs is at your comand.
  5. コマンドプロンプトで cs –version が動けばConscriptインストール成功

giter8 のインストール

giter8 について説明されているサイト

How To

giter8 は、githubにあるテンプレートをローカルPCに配置してくれるツールのようです。

  1. cs n8han/giter8 を実行
  2. コマンドプロンプトで g8 –list が動けば giter8 インストール成功

android-plugin のインストールと雛形プロジェクト作成

scala android について説明されているサイト

android-plugin のインストール

How To
  1. “git://github.com/jberkel/android-plugin.git” からダウンロードする ** msysgit シェルを起動して、適当なディレクトリに移動し、以下を実行
     git clone git://github.com/jberkel/android-plugin.git (ダウンロードする一時ディレクトリはどこでもよい。)
  2. コマンドプロンプトでダウンローとした “android-plugin” に移動し以下を実行
     sbt publish-local

scala android 雛形プロジェクト作成

  1. コマンドプロンプトで、アンドロイドプロジェクトを作りたいディレクトリに移動
  2. 以下のコマンドを実行して、対話式に入力すると jberkel/android-plugin で雛形プラグインが作成される
     g8 jberkel/android-app -b sbt-0_11

雛形プロジェクトをビルドして確認

  1. 以下を実行してしばらく待つ。 (プロジェクトの準備) sbt
  2. 以下を実行してしばらく待つ (ビルド実行)
     android:package-debug
  3. android エミュレータを起動する (エミュレータが起動し終わるまで待つ)
  4. 以下を実行してしばらく待つ (Hello woeld がエミュレータ上に表示される)
     android:start-emulator

何らかのテキストエディタでコーディングするならこれで一応終わりかと思いますが、
IDEをつかいたいので、これから模索してみようと思います。

IntelliJ IDEA なら、scalaかつAndroidのプロジェクトは作れたことがありますがかなり面倒だった記憶があります。
(相当、プロジェクトの設定をごちゃごちゃいじらないといけなかったのでわすれました。)

最近の eclipse scala プラグインは出来がよくなってきたので、できらばeclipseを使いたい気持ちです。

うまくいったら、またブログをかこうとおもいます

sbt-android-pluginのcreate_projectのオブジェクト化を最新版を使って実施する

7月 5th, 2011 Posted in android, sbt, scala

“adb.exe”の格納ディレクトリを書き換えるとか面倒なので、
“create_project.sh” の最新版を調べてみると、
最新版ではディレクトリが、”platform-tools” に直っていました。
最新版は sbt-android-plugin のバージョンが、”0.5.2SNAP-SHOT” と開発バージョンになっていたので、
今回は、ちょっと古い
https://github.com/jberkel/android-plugin/commit/e7acf15c5f424e8f67f2c0a193d754b0c63c3238#script
を使って、”create_project.sh” をscalaオブジェクトに変換してみました。
今後新しいバージョンが出てきた場合は、同じやり方でできるのではないかと思います。

“create_project.sh” をscalaオブジェクトに変換する

  1. [https://github.com/jberkel/android-plugin](sbt-android-plugin サイト)から、 create_project.sh を入手する。ファイル名を create_project.scala にする。
  2. 上の3行を削除する。(またはコメント化するコメント化する。)
  3. 一番上に以下のobject宣言を追加します。

    object CreateProject {
    def main( args:Array[String] ){

  4. 一番下に以下の閉じ括弧を2つ追加します。

    }
    }

  5. > scalac create_project
    

    scalac create_project.scala

あとは、先日の手順のと同様に実施すればうまくいきました。 ( http://ti.que.jp/p/2011/07/02/sbtscalaandroidhowto/ )

なお、

override def adbPath = androidSdkPath / “platform-tools” / adbName

の加工部分は不要になります。

sbtを使ってscalaプロジェクトをandroidにデプロイする手順

7月 2nd, 2011 Posted in android, sbt, scala

プロジェクトの作成と準備

Windowsで作業した内容です。Java、Scala、Android_SDKはインストール済みでかつ、
エミュレータが”SDK Manager”などで作成されている状態のの前提で書きます。

sbt (simple-build-tool) の準備

  1. sbt の準備
    sbtはhttp://code.google.com/p/simple-build-tool/からダウンロードする。
    2011-6-30時点の最新は sbt-launch-0.7.7.jar 今回はこれを使用
    sbt-launch-0.7.7.jar を適当なディレクトリに配する。(このディレクトリを[SBT_HOME]と呼ぶ)
  2. sbt の WIKI の http://code.google.com/p/simple-build-tool/wiki/Setup で説明されているとおりに、 [SBT_HOME] に sbt.bat を作成する。

    set SCRIPT_DIR=%~dp0
    java -Xmx512M -jar “%SCRIPT_DIR%sbt-launch-0.7.7.jar” %*

  3. [SBT_HOME]を、環境変数 PATH に追加しておく

sbt でScalaアンドロイドプロジェクトを作成する

  1. sbt-android-pluginサイトから、create_project シェルを入手する。
    https://github.com/jberkel/android-plugin/tree/master/script
    create_project は、シェルから、Scalaコマンドを実行する内容だが、Windows では動かない。
    ただし、create_project をコンパイルできるScalaソースに修正して実行することで使える。
    ( (jp.武田ソフト.ブログ._)[http://blog.takeda-soft.jp/blog/show/383] さんが説明されています。
    今回は、jp.武田ソフト がScalaファイルに変換された、 https://gist.github.com/486306
    をコンパイルして使わせていただきました。)
  2. “[SBT_HOME]/createProject” に、create_project.scala を配置する。
    このディレクトリは[CREATE_PROJECT_HOME]と呼ぶことにする。
    [CREATE_PROJECT_HOME]で、create_project.scala をコンパイルする。
    [CREATE_PROJECT_HOME]以下に10ファイル強のclassファイルができる。

    scalac create_project

  3. プロジェクトを作成するワークスペースディレクトリに移動する。このディレクトリを[WK_SP]と呼ぶことにする。

  4. [WK_SP]に、Scalaアンドロイドプロジェクトを作成するためのバッチファイル”createProject.bat”を作成する。

    cd %~dp0
    set API_LEVEL=8
    set PROJECT_NAME=SampleProject
    set PACKAGE_NAME=sample.a.b
    set SCALA_VERSION=2.9.0
    set ACTIVITY_NAME=SampleActivity

    set CREATE_PROJECT_DIR=[CREATE_PROJECT_HOME]を指定する

    cmd scala -cp .;%CREATE_PROJECT_DIR% CreateProject ^
    %PROJECT_NAME% %PACKAGE_NAME% ^
    –api-level %API_LEVEL% ^
    –scala-version %SCALA_VERSION% ^
    –activity %ACTIVITY_NAME%

    • 2行目からのsetで環境変数を指定している部分は、作成したいプロジェクトに応じて値を変更する。
    • API_LEVEL=9(Android 2.3 に対応したAPI)ではプロジェクトは作れたがうまく動作しなかった
  5. PROJECT_NAMEで指定したディレクトリができている。
    (上の例では、”[WK_SP]/SampleProject”。以後[PROJECT_ROOT]と呼ぶ)
    [PROJECT_ROOT] に移動してsbtコマンドを発行する。

    sbt

    update

    package-debug

    • これで、[PROJECT_ROOT]以下に、依存しているリソースがダウンロードされる。

プロジェクトをビルドする

  1. Android SDKをインストールしたディレクトリを、環境変数”ANDROID_SDK_HOME”に設定する。
  2. 最新の Android SDK では、”adb.exe” の格納ディレクトリが、
    “[ANDROID_SDK_HOME]/tools” から “[ANDROID_SDK_HOME]/platform-tools” に変更されている。
    自動生成された。インストールされている”[Android SDK]/tools” に “adb.exe”がなければ、
    “[PROJECT_ROOT]/project/build/プロジェクト名.scala”(上の例では”SampleProject.scala”)
    中の”MainProject”クラスと”TestProject”の関数”adbPath”を以下のようにオーバーライドする。
    (現時点のsbt-android-pluginは、”[ANDROID_SDK_HOME]/tools/adb.exe”を使おうとしてしまう)

    class MainProject(info: ProjectInfo) extends AndroidProject(info) with Defaults with MarketPublish {
    val keyalias = “change-me”
    val scalatest = “org.scalatest” % “scalatest” % “1.0” % “test”

    override def adbPath = androidSdkPath / “platform-tools” / adbName

    }

    class TestProject(info: ProjectInfo) extends AndroidTestProject(info) with Defaults{
    override def adbPath = androidSdkPath / “platform-tools” / adbName
    }

  3. 書き換えが終わったら。sbt コマンド reload を実行する。

    reload

  4. コンパイルする

    compile

  5. Androidエミュレータを起動する

    start %ANDROID_SDK_HOME%\tools\emulator -avd %EMULATOR_NAME%

  6. Androidエミュレータにデプロイする
    sbtコマンド install-emulator を実行する

    install-emulator

    1. “[PROJECT_ROOT]/target/scala_[scalaバージョン番号]” に”プロジェクト名.apk” ができる。
  7. Androidエミュレータからアンデプロイする

    uninstall-emulator

  8. デバイスへのインストール
    以下のコマンドで実施できる模様。実機を持っていないので未確認。

    install-device

ScalaとAndroidとMavenうまくいきませんでした

6月 27th, 2011 Posted in maven, sbt, scala

Scala を使わず、Maven+Android でプロジェクトをビルドするところまではうまくいくのですが、
Scalaをpom.xml に記述すると以下のようなエラーがでて解決できませんでした。

Embedded error: ANDROID-040-001: Could not execute: Command = cmd.exe /X /C “C:[android-sdkのパス]\platform-tools\dx.bat –dex
–output=C:[プロジェクトのパス]\target\classes.dex C:[プロジェクトのパス]\target\android-classes”, Result = 2

“cmd.exe /X /C …..” のコマンドを直接実行しても原因究明にいたる情報が見つけられず、

一旦あきらめて、sbtとScalaとAndroidで動作させる方向にします。。。残念