Как включить внешний файл jar в банку с пакетом?

17

Мой проект зависит от внешней банки. Я создал каталог lib и скопировал в него файл jar. Это мой build.sbt :

name := "approxstrmatch"

version := "1.0"

scalaVersion := "2.10.4"

unmanagedJars in Compile += file("lib/secondstring-20140729.jar")

libraryDependencies+="org.apache.spark"%%"spark-core"%"1.0.0"

resolvers += "AkkaRepository" at "http://repo.akka.io/releases/"

Когда я запускаю clean и package , внешний файл jar не включается в сгенерированный файл jar. Почему?

Это макет проекта:

project/build.sbt
lib/
src/.....
    
задан user3803714 05.08.2014 в 01:49
источник

6 ответов

17

Прежде всего, нет необходимости указывать unmanagedJars явно, если у вас нет более сложной конфигурации. Просто поместите свои файлы JAR в каталог lib , и они будут добавлены в путь к классам ( docs ).

Чтобы упаковать исполняемый JAR со всеми необходимыми зависимостями, используйте один из плагинов SBT: sbt-onejar или SBT сборки . package просто упаковывает ваши классы в банку и не заботится обо всех зависимостях.

Инструкции в документах плагинов должны быть легкими для указания того, как их использовать.

    
ответ дан yǝsʞǝlA 05.08.2014 в 02:26
источник
12

Попробуйте это

libraryDependencies += "com.acme.common" % "commonclass" % "1.0" from "file:///Users/bwong/git/perf-tools/commonclass/target/scala-2.11/commonclass_2.11-1.0.jar"

I "sbt package" представляет собой общий класс-проект, а затем просто добавьте эту зависимость библиотеки в мой build.sbt в зависимых проектах.

Благодаря ссылке для этого взлома.     

ответ дан Bernie 04.11.2016 в 03:57
источник
9

Трюк заключается в том, чтобы выяснить, в каком каталоге lib помещается ваш JAR. Вы можете сделать это, выполнив следующее в консоли sbt: show unmanagedBase .

Если вы не видите свой проект там, вы можете запустить show YOURPROJECT/unmanagedBase , чтобы найти правильный путь lib .

    
ответ дан png 26.04.2016 в 18:36
источник
2

Добавьте эту строку в свой файл build.sbt и clean & amp; компилируйте свой проект.

project / libs, где проект является корневым каталогом вашего проекта, поместите свои jars в папку libs.

unmanagedBase <<= baseDirectory { base => base / "libs" }
    
ответ дан Sivailango 10.07.2015 в 15:35
источник
1

tl; dr Переместите project/build.sbt на один уровень вверх, где находится каталог lib , и используйте sbt- сборку (как описано в другом ответе Алексея ).

Если макет каталога проекта так же используется для вашего проекта, он неверен, поскольку build.sbt не принадлежит к той же сборке, где lib делает.

Поскольку sbt является рекурсивным , этот project/build.sbt описывает проект, который управляет основным. Цитирование документов :

  

Каталог проекта - это еще один проект внутри вашего проекта, который   знает, как построить свой проект. Проект внутри проекта может (в   теория) делают все, что может сделать любой другой проект. Ваше определение сборки   проект sbt.

     

И черепахи идут вниз. Если хотите, вы можете настроить   построить определение проекта определения построения, создав   каталог проекта / проекта /.

    
ответ дан Jacek Laskowski 05.08.2014 в 12:53
источник
1

Одно из решений заключается в том, что когда вы создаете этот баннер в sbt, do sbt publish-local

    
ответ дан Vlad Patryshev 11.03.2017 в 00:27
источник