Как разрешить мои собственные тестовые артефакты в SBT?
один из моих проектов предоставит пакет jar, который должен использоваться для модульного тестирования в нескольких других проектах. До сих пор мне удалось заставить sbt производить objects-commons_2.10-0.1-SNAPSHOT-test.jar
и опубликовать его в моем репозитории.
однако я не могу найти способ сказать sbt использовать этот артефакт с областью тестирования в других проектах.
добавление следующих зависимостей в мою сборку.scala не загрузит тестовый артефакт.
"com.company" %% "objects-commons" % "0.1-SNAPSHOT",
"com.company" %% "objects-commons" % "0.1-SNAPSHOT-test" % "test",
мне нужно использовать по умолчанию.jar-файл как зависимость компиляции и времени выполнения и The-test.jar как зависимость в моей тестовой области. Но почему-то sbt никогда не пытается разрешить тестовую банку.
3 ответов
как использовать тестовые артефакты
чтобы включить публикацию тестового артефакта при публикации основного артефакта, необходимо добавить его в сборку.СБТ библиотеки:
publishArtifact in (Test, packageBin) := true
опубликовать артефакт. Должно быть не менее двух банок: objects-commons_2.10.jar и объекты-commons_2.10-тест.сосуд.
чтобы использовать библиотеку во время выполнения и тестовую библиотеку в области тестирования, добавьте следующие строки для построения.sbt главного применение:
libraryDependencies ++= Seq("com.company" % "objects-commons_2.10" % "0.1-SNAPSHOT"
, "com.company" % "objects-commons_2.10" % "0.1-SNAPSHOT" % "test" classifier "tests" //for SBT 12: classifier test (not tests with s)
)
первая запись загружает библиотеки среды выполнения, а вторая запись заставляет артефакт "тесты" доступен только в области тестирования.
Я создал пример проекта:
git clone git@github.com:schleichardt/stackoverflow-answers.git --branch so15290881-how-do-i-resolve-my-own-test-artifacts-in-sbt
или вы можете посмотреть пример непосредственно в github.
ваша проблема в том, что sbt думает, что ваши две банки-один и тот же артефакт, но с разными версиями. Он принимает "последний", который является 0.1-SNAPSHOT, и игнорирует 0.1-SNAPSHOT-test. Это то же самое поведение, которое вы увидите, если, например, у вас есть 0.1-SNAPSHOT и 0.2-SNAPSHOT.
Я не знаю, что находится в этих двух банках, но если вы хотите, чтобы они оба были на пути к классам, что вы, похоже, хотите сделать, тогда вам нужно изменить имя тестового артефакта для объектов-общего-теста, как предложил Казухиро. Кажется, это должно быть достаточно легко для вас, так как вы уже помещаете его в репо самостоятельно.
он будет работать нормально, если вы измените name
такой.
"com.company" %% "objects-commons" % "0.1-SNAPSHOT",
"com.company" %% "objects-commons-test" % "0.1-SNAPSHOT" % "test",