Добавьте только зависимость времени компиляции в sbt

17

Я хотел бы добавить зависимость к проекту sbt, который используется только для компиляции. Он также не должен находиться в пути класса времени выполнения и не должен быть видимым в любой форме в опубликованной POM.

Идея состоит в том, чтобы добавить только библиотеку-заглушку ( OrangeExtensions ), чтобы проект мог быть скомпилирован на любой платформе не только ОС X.

Возможно ли это как-то:

libraryDependencies += "com.yuvimasory" % "orange-extensions" % "1.3.0" % ???

?

    
задан 0__ 02.02.2014 в 20:46
источник
  • Если ваш код зависит от OrangeExtensions (его нельзя скомпилировать без него), я бы сказал, что он необходим и во время выполнения. –  Rado Buransky 02.02.2014 в 21:00
  • @RadoBuransky OrangeExtensions - это всего лишь заглушка версии библиотеки, предоставляемой Java OS X от Apple. API, который я разрабатываю вокруг него, точно не будет обращаться к этому API, если не на Mac. Чтобы скомпилировать проект на не-Mac, вам нужны заглушки. Очевидно, что заглушки - это только справка. –  0__ 02.02.2014 в 21:09
  • Вы можете использовать «предоставленный», но он появится. –  jsuereth 02.02.2014 в 22:37

1 ответ

43

Вы можете создать пользовательскую конфигурацию зависимостей для этого (на самом деле, это становится настолько распространенным, когда вы используете частные макросы в своем проекте, я хочу, чтобы SBT предоставил один).

В build.sbt :

// a 'compileonly' configuation
ivyConfigurations += config("compileonly").hide

// some compileonly dependency
libraryDependencies += "commons-io" % "commons-io" % "2.4" % "compileonly"

// appending everything from 'compileonly' to unmanagedClasspath
unmanagedClasspath in Compile ++= 
  update.value.select(configurationFilter("compileonly"))

Эта зависимость не будет отображаться в pom.xml , сгенерированном publish и друзьями.

Здесь почти доступна такая конфигурация: конфигурация provided . За исключением того, что provided попадает в pom.xml в зависимости от provided . Кроме того, provided означает «сама среда выполнения предоставляет это во время выполнения», а не «это не требуется во время выполнения».

    
ответ дан gourlaysama 02.02.2014 в 23:14
  • Хороший ответ, который действительно заслуживает большего внимания :) –  Kevin Wright 03.02.2014 в 00:06
  • Спасибо! Это действительно хорошо. –  Rado Buransky 03.02.2014 в 01:59
  • Это не работает для меня с проектом макросов SBT, используя 'dependsOn (macrosProject% "compileonly")' (иначе в соответствии с документами). Любые идеи, почему бы и нет? Суб-проект недоступен во время компиляции. –  Rich 15.05.2014 в 12:51
  • Кажется, что не работает с плагином Intellij scala (1.1.2). –  Bruno Bieth 23.11.2014 в 14:28
  • Примечание. Для sbt1.0 требуется элемент конфигурации капитала. Используйте 'val CompileOnly = config ("compileonly"); ivyConfigurations + = CompileOnly.hide; ' см.: stackoverflow.com/a/35486527/622016 –  radke 01.09.2017 в 16:47