Как настроить sbt для загрузки ресурсов при запуске приложения? - PullRequest
11 голосов
/ 21 декабря 2011

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

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

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

Запуск этого из sbt console также дает нулевое значение:

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

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

EDIT:

Я установил каталог ресурсов как исходный каталог:

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

Когда я загрузил консоль sbt и запустил следующее:

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

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

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

EDIT2:

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

EDIT3:

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

Решение:

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

1 Ответ

4 голосов
/ 21 декабря 2011

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

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

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

[EDIT2] Это полный скрипт сборки (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)
  )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...