2015-05-29 4 views
2

Как добавить resourceDirectory в Java Classpath, а SBT запускает тесты?Изменение класса в SBT во время теста

На данный момент у меня есть только sbt jar.

Моя потребность обусловлена ​​зависимости (искровая Кассандра разъем EmbeddedCassandra) загрузка ресурса через ClassLoader.getSystemResourceAsStream, а не getClass().getClassLoader().getResource ...

+0

Что такое System Classpath? – marios

+0

С «System Classpath» я имею в виду то, что установлено либо с «java -cp ...», либо с системным свойством CLASSPATH (и вы получаете с 'System.getProperty (« java.class.path »);» в отличие от SBT fullClasspath. – ch4mp

ответ

1

Если вы хотите добавить новый файл/папку в Java Classpth вы можете добавьте следующую строку в build.sbt:

(fullClasspath in Test) := (fullClasspath in Test).value ++ Seq(Attributed.blank((resourceDirectory in Test).value)) 

Это добавит папку заданной настройкой test:resourceDirectory к Classpath при конфигурации Test.

Примечание:

Задача fullClasspath обеспечивает путь к классам, включая как зависимости и продукты проекта. Для тестового пути класса это включает основные и тестовые ресурсы и скомпилированные классы для проекта, а также все зависимости для тестирования.

...

fullClasspath является конкатенация dependencyClasspath и exportedProducts

Более подробную информацию можно найти here.

+0

Вот что я получаю, когда после добавления того, что вы предлагаете, я 'System.out.println (s" classpath: $ {System.getProperty ("java.class.path")} ")' непосредственно перед попыткой (безуспешно) для доступа к тестовому ресурсу: _classpath: /usr/local/Cellar/sbt/0.13.8/libexec/sbt-launch.jar_ – ch4mp

+0

Я не уверен, что 'System.getProperty (" java.class.path ")' дает вам полностью то, что вам нужно. В SBT попробуйте показать 'test: fullClasspath', и он покажет, что добавлена ​​папка ресурса. Я действительно прошел весь путь и добавил банку в« fullClasspath »и скомпилировал ее, чтобы посмотреть, загружается ли она и все работает нормально. – marios

+0

, показывающий fullClasspath в тесте, отображает все, что настроено, плюс значения по умолчанию (тестовые ресурсы являются частью o поместиться). Это на самом деле, где ресурсы ищутся, когда вы выполняете 'getClass.getClassLoader.getResource', но не когда вы выполняете' ClassLoader.getSystemResource' (что происходит внутри lib, которое я использую, как я утверждаю в своем вопросе) – ch4mp

Смежные вопросы