Подтвердить что ты не робот

Как настроить sbt для загрузки ресурсов при запуске приложения?

Мой код (Java) читает изображение из jar:

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

Все работает нормально (если я запустил приложение после его упаковки в банку). Но когда я запускаю его с помощью задачи sbt run, он возвращает мне null вместо необходимого потока.

Запуск этого из sbt console также дает null:

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

Есть ли способ сказать sbt разместить мои ресурсы в пути к классам?

EDIT:

Я устанавливаю dir ресурсов как те же, что и исходный dir:

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

Когда я загрузил sbt `console 'и выполнил следующее:

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

Я получил расположение своих классов, но не содержит ни папки res, ни каких-либо моих файлов ресурсов.

Кажется, что sbt копирует ресурсы только в полученную банку и не копирует их в классы dir. Должен ли я изменить задачу компиляции, чтобы переместить эти файлы ресурсов в классы dir?

EDIT2:

Да, когда я вручную копирую файл ресурсов в каталог dir, я могу легко получить доступ к нему с консоли. Итак, как мне автоматизировать этот процесс?

EDIT3:

Кажется, что sbt просто не может увидеть мою папку ресурсов - она ​​не добавляет файлы в полученный файл jar, фактически!

Решение:

resourceDirectory in Compile <<= baseDirectory { _ / "src" }
4b9b3361

Ответ 1

Я не могу дать вам полное решение прямо сейчас, но есть параметр, называемый resourceDirectories, к которому вы могли бы добавить папку res.

[EDIT] Для меня это не сработало, если ресурс находился в стандартной папке ресурса. Пожалуйста, попробуйте так:

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

[EDIT2] Это полная сборка script (build.scala), которая работает, если ваш ресурс находится в src/main/java:

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)
  )
}