既存のライブラリが java.util.logging API 使ってて、俺は今 logback が使いたいんだ!
既存のライブラリが java.util.logging API 使ってて、俺は今 logback が使いたいんだ!設定ファイルは logback.xml に統一したいんだ!という人向けの情報
http://mvnrepository.com/
で「jul-to-slf4」java logging api から slf4j へのブリッジになるライブラリを落としてきます。
以下のようなコードを書きます。Java
java.util.logging.Logger rootLogger = LogManager.getLogManager().getLogger(""); Handler[] handlers = rootLogger.getHandlers(); for (int i = 0; i < handlers.length; i++) { rootLogger.removeHandler(handlers[i]); } SLF4JBridgeHandler.install()
val rootLogger = LogManager.getLogManager().getLogger("") val handlers = rootLogger.getHandlers handlers.foreach(rootLogger.removeHandler(_)) SLF4JBridgeHandler.install()
sbtからすべてのテストを実行すると失敗する件
IDEAから単体でテストしたり、
sbtプロンプトから
>test-only hoge.FooTest
ならテスト通るが、
>test
で実行すると動かない問題にハマった
結論からいうとsbt 0.11.2 0.10.0 以降には、タスクの並列実行(Parallel Execution)の機能が入った。
https://github.com/harrah/xsbt/wiki/Parallel-Execution
タスクが並列実行されて早くなっていいね!
って話だろうが、テスト、特にDBとかファイルとか扱ってるテストは並列実行されると困る。
答えは .sbt や Build.scala 的な奴に
parallelExecution in Test := false
を足す
スローテストとか問題になってきたら、DBとか副作用のあるテストをまとめたプロジェクトを作って…とかやれないこともないが多分めんどくさいしやらない
sbtでcompileとかpackageとかの前に自分のタスクを差し込みたい
まぁ、たとえばpackage前にjarに入れたいファイルを加工する自前のタスクとか挟みこみたいわけです。
例えば単純なカスタムタスク
val hello = TaskKey[Unit]("hello") val helloTask = hello := { println("hello") }
があったときに、compile タスク実行前に hello を表示させたいという欲求があるときは、
.sbt、Scala ファイルには
(compile in Compile) <<= compile in Compile dependsOn (hello)
という感じにかけと書いてあるわけです。
なんか動かん…
答えは僕の環境がマルチプロジェクトだったからだった…
ようは Project を生成するときの settings に 上記 dependsOn を書き換えた compile を渡せばよい。
めんどくさいので、今の想定されるうちのプロジェクトのビルドファイル晒しておきます。
scala + specs2 + sbt で特定のクラスの中のさらに特定のテストだけ実行したい
Scala で specs2 使いながら開発・テストしてるときに、特定のクラスのさらに特定のテストだけ実行したいときありませんか?僕はありました
なので調べました
とりあえず特定のクラスのみは以下
sbt>test-only hoge.FooTest
ね。簡単でしょう?
特定のテストだけがだるかった
まずソースを見て欲しい
with Tags というのと should のあとに section、in のあとに tag というメソッドを呼び出してるのがお分かりいただけるだろうか?このとき
sbt>test-only SpecsStudyTest -- include world
と実行すれば"world"とタグ付されたテストが実行される
他にもいい方法あったら誰か教えてくだしあ!
(特定のクラスはいいとして特定の部分まではやり過ぎ感あるw)
sbt で最新のScalaのバージョンのライブラリがまだリポジトリにないときの対処法
Scalaのバージョンが 2.9.2 にあがりましたね。
ついさっき、lift-json を試用してみようとしたんですよ
そしたら今日現在、lift-jsonは2.9.1までのjarしか置いてない…
http://oss.sonatype.org/content/repositories/releases/net/liftweb/
sbt使ってるんですが、どうするのがいいのだろうか…
正解: "net.liftweb" % "lift-json_2.9.1" % "2.4"
こう書く
sbtに
crossScalaVersions := Seq("2.9.2", "2.9.1")
と書いてlift-jsonを解決させた
なんか無理やり感もあるのでなんか他にいい方法あったら誰か教えてください
追記:
結局実行時に怒られた…どうすればいいの?