Исключение неуправляемых зависимостей из universal:packageBin в sbt-native-packager?

У меня есть внешний каталог lib с банками. Мне нужно, чтобы они были включены в мой путь к классам, чтобы скомпилировать и протестировать мой проект, но я не хочу включать их в распространяемый zip-файл, созданный с помощью universal:packageBinsbt-native-packager) (или dist, если вы используете файл playframework.

Я попытался сделать это, используя область provided следующим образом:

unmanagedBase in Provided := new java.io.File("/external/lib")

Но это, похоже, не работает так, как рекламируется - банки, похоже, не включаются в область Compile.

Я использую sbt 0.13.1.


person ishaaq    schedule 24.03.2014    source источник
comment
Попробуйте unmanageBase in packageBin := file("/external/lib")   -  person laughedelic    schedule 24.03.2014
comment
к сожалению, @laughedelic, это удаляет deps из области компиляции - они мне все еще нужны там :(   -  person ishaaq    schedule 25.03.2014
comment
Разве unmanageBase in Compile := file("/external/lib") не помогает и с Compile областью действия, и с packageBin задачей? Если нет, вы можете просто установить оба отдельно.   -  person laughedelic    schedule 25.03.2014
comment
извините, вы неправильно поняли - я хочу, чтобы неуправляемые jar-файлы компилировались (и тестировались), но я не хочу включать их в двоичный дистрибутив. В основном я пытаюсь воспроизвести то, что делает предоставленный объем в maven.   -  person ishaaq    schedule 25.03.2014
comment
Кто-нибудь знает как это сделать?   -  person Dimitry    schedule 31.03.2014


Ответы (2)


Это работает (спасибо @jacek-laskowski за улучшения моего ответа):

mappings in Universal :=  (mappings in Universal).value.filter { case(jar, _) => jar.getParentFile != unmanagedBase.value }

Но это все еще похоже на кладж, я бы предпочел, чтобы sbtsbt-native-packager) должным образом поддерживали область Provided, поскольку этот сценарий - именно то, для чего он предназначен.

person ishaaq    schedule 01.04.2014
comment
Я бы не стал использовать !_._1 и заменил предикат в filter на { case (x,y) if ... => ... }. - person Jacek Laskowski; 03.04.2014

Я бы предложил следующее решение:

mappings in Universal := (mappings in Universal).value filter { case (jar, path) => 
  jar.getParentFile != (unmanagedBase in Compile).value
}

Он дублирует mappings in Universal, чего можно было бы избежать с помощью ~=, но тогда не предлагается поддержка макросов .value.

Я думаю, что решение, однако, безопасно для типов, поскольку оно использует значение параметра unmanagedBase in Compile, равное java.io.File (а не java.lang.String, которое подвержено опечаткам).

person Jacek Laskowski    schedule 03.04.2014