System properties の切り替えのみの構成で、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | ./ | +--build.sbt | +--project | | | +--build.properties | +--sampleconfig1 | | | +--build.sbt | | | +--src | | | +--main | | | +--scala | | | +--SampleConfig1.scala | +--sampleconfig1.conf | +--sampleconfig2 | | | +--build.sbt | | | +--src | | | +--main | | | +--scala | | | +--SampleConfig2.scala | +--sampleconfig2.conf |
./build.sbt
1 2 3 4 5 | name := "sampleconfig" lazy val sampleconfig 1 = project lazy val sampleconfig 2 = project |
./project/build.properties
1 | sbt.version = 0.13 . 8 |
./sampleconfig1/build.sbt
1 | name := "sampleconfig1" |
./sampleconfig2/build.sbt
1 | name := "sampleconfig2" |
./sampleconfig1/src/main/scala/SampleConfig1.scala
1 2 3 | object SampleConfig 1 extends Application { println( "SampleConfig1: " + System.getProperty( "config.file" )) } |
./sampleconfig2/src/main/scala/SampleConfig2.scala
1 2 3 | object SampleConfig 2 extends Application { println( "SampleConfig2: " + System.getProperty( "config.file" )) } |
まずは sammpleconfig1 から、引数指定で試す。
1 |
1 2 3 4 | # sbt > project sampleconfig1 > run -Dconfig. file =sampleconfig1.conf SampleConfig1: null |
取れない・・・
つぎに、javaOptions を指定。
./sampleconfig1/build.sbt
1 2 3 | name := "sampleconfig1" javaOptions in Runtime + = "-Dconfig.file=sampleconfig1.conf" |
取れない・・・
ぐぐってみると、initialize を使ってる書き込みがあったので使用してみる。
./sampleconfig1/build.sbt
1 2 3 4 5 6 | name := "sampleconfig1" initialize ~ = { _ = > if ( new java.io.File( "sampleconfig1.conf" ).exists) System.setProperty( "config.file" , "sampleconfig1.conf" ) } |
1 |
1 2 3 4 | # sbt > project sampleconfig1 > run SampleConfig1: sampleconfig1.conf |
おっ取れてる!
うまくいったということで暫くこれでやっていたが、設定ファイルが読めない時が・・・
実は initialize を使用した後に、sampleconfig2 のプロジェクトを追加していて
./sampleconfig2/build.sbt
1 2 3 4 5 6 | name := "sampleconfig2" initialize ~ = { _ = > if ( new java.io.File( "sampleconfig2.conf" ).exists) System.setProperty( "config.file" , "sampleconfig2.conf" ) } |
1 |
1 2 3 4 | # sbt > project sampleconfig2 > run SampleConfig2: sampleconfig2.conf |
この時点では取れているのだが、再度 sampleconfig1 を実行すると
1 2 3 4 | # sbt > project sampleconfig1 > run SampleConfig1: sampleconfig2.conf |
と他のプロジェクトの設定が取れてしまっていた・・・
なので実行前に設定するタスクを入れることに。
./sampleconfig1/build.sbt
1 2 3 4 5 6 7 8 9 10 | name := "sampleconfig1" val setProperty = TaskKey[Unit]( "setProperty" ) in Compile setProperty := { if ( new java.io.File( "sampleconfig1.conf" ).exists) System.setProperty( "config.file" , "sampleconfig1.conf" ) } run in Compile << = run in Compile dependsOn (setProperty) |
./sampleconfig2/build.sbt
1 2 3 4 5 6 7 8 9 10 | name := "sampleconfig2" val setProperty = TaskKey[Unit]( "setProperty" ) in Compile setProperty := { if ( new java.io.File( "sampleconfig2.conf" ).exists) System.setProperty( "config.file" , "sampleconfig2.conf" ) } run in Compile << = run in Compile dependsOn (setProperty) |
1 2 3 4 5 6 7 | # sbt > project sampleconfig1 > run SampleConfig1: sampleconfig1.conf > project sampleconfig2 > run SampleConfig2: sampleconfig2.conf |
これでうまくいった
in Compile を in Runtime にするとうまくいかない・・・難しい・・・