2011-12-21 10 views
10

私のコード(Javaは)jarファイルから画像を読み込みます(私はjarファイルにパッケージした後にアプリを起動した場合)アプリケーションを実行しているときにリソースをロードするようにsbtを設定する方法は?

Main.class.getResourceAsStream("/res/logo.png") 

すべてが正常に実行されます。しかし、sbtのrunタスクを使用して実行すると、必要なストリームではなくnullが返されます。 SBT consoleからこれを実行する

もヌルいます:

getClass.getResourceAsStream("/res/logo.png") 

は、クラスパス上に私のリソースを置くためにSBTを伝える方法はありますか?

EDIT:

私はソースディレクトリと同じになるようにリソースのディレクトリを設定します。

build.sbt: 
resourceDirectory <<= baseDirectory { _/"src" } 

私はSBTの `コンソール」をロードし、次のことを実行したとき:

classOf[Main].getProtectionDomain().getCodeSource() 

私が得ました私のクラスの場所ですが、resフォルダも自分のリソースファイルも含まれていません。

sbtは結果のjarファイルにのみリソースをコピーし、dirクラスにはコピーしないようです。これらのリソースファイルをクラスdirに移動するためにコンパイルタスクを変更する必要がありますか?

EDIT2:私は手動でクラスのディレクトリにリソースファイルをコピーするとき

はい、私は簡単にコンソールからアクセスすることができます。では、このプロセスをどのように自動化するべきですか?

EDIT3:

SBTは、私のリソースフォルダを見ることだけができないようだ - それは実際には、jarファイルを結果にファイルを追加しません!

ソリューション:

resourceDirectory in Compile <<= baseDirectory { _/"src" } 
+1

'sbtの' run'、 'console'、' test'からは問題なく動作します。多少の詳細が役立つかもしれません。 sbtのどのバージョン?ファイルがどこにあるか(別の.jar、 'src/main/resources'など)リソース関連のプラグインや設定はありますか? – leedm777

+0

Sbt - 最新のバージョン、今日ダウンロード(0.11.2、私は思う)。ファイルはsrc/res/logo.pngにあります。そして、 "resourceDirectory << = baseDirectory {_ /" src "}"をbuild.sbtに追加しました – Rogach

+1

あなたが規約に従い、リソースを 'src/main/resources'に入れるとどうなりますか? – leedm777

答えて

4

私は今あなたに完全なソリューションを与えることはできませんが、RESフォルダを追加することができますするresourceDirectoriesと呼ばれる設定があります。

[編集] 私にとっては、リソースが標準のリソースフォルダにあったとしても動作しませんでした。そのようにしてみてください:

Main.class.getClassLoader().getResourceAsStream("icon.png") 

[EDIT2]これはあなたのリソースはSRC /メイン/ Javaであれば動作する完全なビルドスクリプト(build.scala)です:

私は `getResourceAsStreamを使用
import sbt._ 
import Keys._ 

object TestBuild extends Build { 

    lazy val buildSettings = Seq(
    organization := "com.test", 
    version := "1.0-SNAPSHOT", 
    scalaVersion := "2.9.1" 
) 

    lazy val test = Project(
    id = "test", 
    base = file("test"), 
    settings = Defaults.defaultSettings ++ Seq(resourceDirectory in Compile <<= javaSource in Compile) 
) 
} 
関連する問題