sbtからbuildrに乗り換え中
今作っているscalaのlwjglのプログラムはビルドにsbtを使っていたのだけど、
開発マシンをUbuntuに乗り換えたのを機に、ビルドツールもbuildrに乗り換えてみる。
まず、buildr自身のインストールなのだが、javaとrubyをブリッジするrjbのインストールが
わりと厄介。Ubuntuでさくっとできたが、Windowsではうまくいかなかった。
JRubyを使うのがいいかもしれぬ。
乗り換え前はこんな感じ
project +bulid.xml +src App.scala +trigonal +hogehoge.scala +fugafuag.java
まずbuildfileを生成する。
# どけとく $ mv build.xml .. # buildrの流儀にファイルを配置しなおす $ mkdir -p src/main/{scala,java} # 木構造を維持してscalaとjavaのソースをわけた # 雛形生成。buildfileが無い状態でbuildrとすると雛形を作成できる $ buildr To use Buildr you need a buildfile. Do you want me to create one?: 1. From directory structure 2. Cancel # 1を選択した # 趣味で先頭を大文字に $ mv buildfile Buildfile
ビルドする
$ build compile
# lwjglが見つからないのでエラーいっぱい
どうやらArtifactsとやらを理解する必要があるようだ
http://buildr.apache.org/artifacts.html
ローカルリポジトリ
Maven2 互換で~/.m2に作られる。
$ find .m2
.m2
.m2/repository
.m2/repository/org
.m2/repository/org/apache
.m2/repository/org/apache/ant
.m2/repository/org/apache/ant/ant-launcher
.m2/repository/org/apache/ant/ant-launcher/1.8.0
.m2/repository/org/apache/ant/ant-launcher/1.8.0/ant-launcher-1.8.0.jar
.m2/repository/org/apache/ant/ant-launcher/1.8.0/ant-launcher-1.8.0.pom
.m2/repository/org/apache/ant/ant-trax
.m2/repository/org/apache/ant/ant-trax/1.8.0
.m2/repository/org/apache/ant/ant-trax/1.8.0/ant-trax-1.8.0.jar
.m2/repository/org/apache/ant/ant-trax/1.8.0/ant-trax-1.8.0.pom
.m2/repository/org/apache/ant/ant
.m2/repository/org/apache/ant/ant/1.8.0
.m2/repository/org/apache/ant/ant/1.8.0/ant-1.8.0.jar
.m2/repository/org/apache/ant/ant/1.8.0/ant-1.8.0.pom
.m2/repository/org/scala-lang
.m2/repository/org/scala-lang/scala-library
.m2/repository/org/scala-lang/scala-library/2.7.7
.m2/repository/org/scala-lang/scala-library/2.7.7/scala-library-2.7.7.pom
.m2/repository/org/scala-lang/scala-library/2.7.7/scala-library-2.7.7.jar
.m2/repository/org/scala-lang/scala-compiler
.m2/repository/org/scala-lang/scala-compiler/2.7.7
.m2/repository/org/scala-lang/scala-compiler/2.7.7/scala-compiler-2.7.7.jar
.m2/repository/org/scala-lang/scala-compiler/2.7.7/scala-compiler-2.7.7.pom
.m2/repository/org/scala-tools
.m2/repository/org/scala-tools/vscaladoc
.m2/repository/org/scala-tools/vscaladoc/1.2-SNAPSHOT
.m2/repository/org/scala-tools/vscaladoc/1.2-SNAPSHOT/vscaladoc-1.2-SNAPSHOT.jar
.m2/repository/org/scala-tools/vscaladoc/1.2-SNAPSHOT/vscaladoc-1.2-SNAPSHOT.pom
とりあえずcompileとおった
Buildfile
#Buildr.settings.build['scala.version'] = "2.8.0.Beta1" Buildr.settings.build['scala.version'] = "2.8.0" require 'buildr/scala' # Generated by Buildr 1.4.1, change to your liking # Version number for this release VERSION_NUMBER = "1.0.0" # Group identifier for your projects GROUP = "trigonal" COPYRIGHT = "" LWJGL_URL='http://downloads.sourceforge.net/project/java-game-lib/Official%20Releases/LWJGL%202.5/lwjgl-2.5.zip' LWJGL='org.lwjgl:lwjgl:jar:2.5' LWJGL_UTIL='org.lwjgl:lwjgl-util:jar:2.5' SPECS=[LWJGL, LWJGL_UTIL] # Specify Maven 2.0 remote repositories here, like this: repositories.remote << "http://www.ibiblio.org/maven2/" desc "The Trigonal project" define "trigonal" do project.version = VERSION_NUMBER project.group = GROUP manifest["Implementation-Vendor"] = COPYRIGHT compile.with SPECS package(:jar) lwjgl_zip=download('target/lwjgl-2.5.zip'=>LWJGL_URL) extracted=unzip('target/lwjgl-2.5'=>lwjgl_zip).from_path('lwjgl-2.5').include('jar/*') lwjgl_jar=file('target/lwjgl-2.5/lwjgl-2.5/jar/lwjgl.jar') lwjgl=artifact(LWJGL).from(lwjgl_jar) lwjgl_util_jar=file('target/lwjgl-2.5/lwjgl-2.5/jar/lwjgl_util.jar') lwjgl_util=artifact(LWJGL_UTIL).from(lwjgl_util_jar) end
残りは、コンパイルされたクラスを実行するところ。
実行できた
Buildfile
#Buildr.settings.build['scala.version'] = "2.8.0.Beta1" Buildr.settings.build['scala.version'] = "2.8.0" require 'buildr/scala' # Generated by Buildr 1.4.1, change to your liking # Version number for this release VERSION_NUMBER = "1.0.0" # Group identifier for your projects GROUP = "trigonal" COPYRIGHT = "" LWJGL_URL='http://downloads.sourceforge.net/project/java-game-lib/Official%20Releases/LWJGL%202.5/lwjgl-2.5.zip' LWJGL='org.lwjgl:lwjgl:jar:2.5' LWJGL_UTIL='org.lwjgl:lwjgl-util:jar:2.5' SCALA_LIB='org.scala-lang:scala-library:jar:2.8.0' SPECS=[LWJGL, LWJGL_UTIL] # Specify Maven 2.0 remote repositories here, like this: repositories.remote << "http://www.ibiblio.org/maven2/" desc "The Trigonal project" define "trigonal" do project.version = VERSION_NUMBER project.group = GROUP manifest["Implementation-Vendor"] = COPYRIGHT compile.with SPECS package(:jar) task :extract do lwjgl_zip=download('target/lwjgl-2.5.zip'=>LWJGL_URL) extracted=unzip('target/lwjgl-2.5'=>lwjgl_zip) extracted.from_path('lwjgl-2.5').include('jar/*') extracted.from_path('lwjgl-2.5').include('native/linux/*') extracted.target.invoke end lwjgl_jar=file('target/lwjgl-2.5/jar/lwjgl.jar'=>:extract) lwjgl=artifact(LWJGL).from(lwjgl_jar) lwjgl_util_jar=file('target/lwjgl-2.5/jar/lwjgl_util.jar'=>:extract) lwjgl_util=artifact(LWJGL_UTIL).from(lwjgl_util_jar) task :run => [compile, :extract] do cp = Buildr.artifacts(SPECS+[SCALA_LIB]).each(&:invoke).map(&:name).join(File::PATH_SEPARATOR) lib="target/lwjgl-2.5/native/linux" cmd="java -cp target/classes:#{cp} -Djava.library.path=#{lib} App miku/miku01.mqo" p cmd system cmd end end
jniのsoにパスを通す一般的なやり方(LD_LIBRARY_PATHもしくはjava.library.path)がわからなかったのでベタに書いた。
以上で、jdkとbuildrがインストールされていれば必要なファイル(scala-2.8やlwjgl-2.5など)を自動的にダウンロードして、適当に展開・配置してクラスパスを通してコンパイル・実行するプロジェクトができた。
これで、Scalaでの開発を再開できる。
しかし、Buildrの情報少なかった。
本家サイトを丹念に読めばだいたいわかるのだが、お手軽サンプルをコピペでポンといかないので少し難航した。