Как мне разрешить мои собственные тестовые артефакты в SBT?

Один из моих проектов предоставит пакет jar, который предполагается использовать для модульного тестирования в нескольких других проектах. До сих пор мне удалось создать sbt для создания objects-commons_2.10-0.1-SNAPSHOT-test.jar и опубликовать его в моем репозитории.

Однако я не могу найти способ сказать sbt использовать этот артефакт с областью тестирования в других проектах.

Добавление следующих зависимостей в моей build.scala не приведет к загрузке тестового артефакта.

"com.company" %% "objects-commons" % "0.1-SNAPSHOT",
"com.company" %% "objects-commons" % "0.1-SNAPSHOT-test" % "test",

Мне нужно использовать файл .jar по умолчанию как компиляцию и зависимость времени выполнения и -test.jar как зависимость в моей тестовой области. Но почему-то sbt никогда не пытается решить тестовую банку.

Ответ 1

Как использовать тестовые артефакты

Чтобы включить публикацию тестового артефакта при публикации основного артефакта, вам нужно добавить в библиотеку build.sbt:

publishArtifact in (Test, packageBin) := true

Опубликуйте свой артефакт. Должно быть не менее двух JAR: objects-commons_2.10.jar и objects-commons_2.10-test.jar.

Чтобы использовать библиотеку во время выполнения и тестовую библиотеку в области проверки, добавьте следующие строки в build.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 [email protected]:schleichardt/stackoverflow-answers.git --branch so15290881-how-do-i-resolve-my-own-test-artifacts-in-sbt

Или вы можете просмотреть пример непосредственно в github.

Ответ 2

Ваша проблема в том, что sbt думает, что ваши две банки являются одним и тем же артефактом, но с разными версиями. Он принимает "последний", который составляет 0.1-SNAPSHOT, и игнорирует 0.1-SNAPSHOT-тест. Это то же поведение, что и вы, если у вас есть 0.1-SNAPSHOT и 0.2-SNAPSHOT.

Я не знаю, что находится в этих двух баночках, но если вы хотите, чтобы они оба находились в пути к классам, что вам, похоже, нужно делать, вам нужно будет изменить имя тестового артефакта к объектам-обычным испытаниям, как предложил Кадзухиро. Кажется, это вам должно быть легко для вас, так как вы уже положили его на репо.

Ответ 3

Он будет работать нормально, если вы измените name следующим образом.

"com.company" %% "objects-commons" % "0.1-SNAPSHOT",
"com.company" %% "objects-commons-test" % "0.1-SNAPSHOT" % "test",