Как разрешить мои собственные тестовые артефакты в 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",