2011-12-21 15 views
10

Kodum (Java) kavanozdan bir görüntü okur: (Ben bir kavanoza içine paketleme sonra uygulamayı başlatırsanız)Uygulama çalıştırırken kaynakları yüklemek için sbt nasıl yapılandırılır?

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

Her şey iyi çalışır. Ancak, sbt'nin run görevini kullanarak çalıştırdığımda, gerekli akış yerine null döndürür.

sbt console bu Koşu da boş veriyor: üzerinde sınıf Kaynaklarımı koymak SBT anlamanın bir yolu

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

var mı?

DÜZENLEME:

Ben kaynak dir aynı olacak şekilde kaynaklar dir ayarlayın:

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

Ben SBT en `konsol yüklenen' ve aşağıdaki bitince:

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

aldım sınıflarımın yeri değil, ne res klasörünü ne de kaynak dosyamdan herhangi birini içermiyor.

Bu, kaynakların yalnızca sonuçta oluşan jar'e kopyalar ve bunları sınıflar dizinine kopyalamaz. Bu kaynak dosyalarını sınıf dizinlerine taşımak için derleme görevi değiştirmeli miyim?

EDIT2: manuel sınıflar dir kaynak dosyası kopyalarken

Evet, ben kolayca konsoldan erişebilirsiniz. Peki, bu süreci nasıl otomatikleştirmeliyim?

EDIT3:

sbt benim kaynak klasörü görmek için sadece yapamaz gibi görünüyor - aslında, kavanoz dosyası çıkan dosya eklemek değildir!

Çözüm:

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

'getResourceAsStream bu şekilde deneyin sbt 'run ',' konsol 've' test 'sorun olmaksızın. Belki biraz daha detaylar yardımcı olur. Sbt'nin hangi versiyonu? Dosya nerede bulunur (başka bir .jar veya 'src/main/resources' veya diğer)? Herhangi bir kaynakla ilgili eklentiniz veya yapılandırmanız var mı? – leedm777

+0

Sbt - en son sürüm, bugün indirildi (0.11.2, Sanırım). Dosya src/res/logo.png'de bulunur. Ve ekledi "resourceDirectory << = baseDirectory {_ /" src "}" to build.sbt – Rogach

+1

Sözleşmeyi izlerseniz ve kaynağı "src/main/resources" içine alırsanız ne olur? – leedm777

cevap

4

sana hemen tam bir çözüm veremem, ancak res klasörü eklemek olabilir için resourceDirectories denilen bir ayarı vardır.

[EDIT] Benim için kaynak standart kaynak klasöründe de olsa işe yaramadı.

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

[EDIT2] Bu kaynak/ana/java src ise çalışır tam script kurmak (build.scala) 'dir: Kullandığım

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) 
) 
} 
İlgili konular