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