Add a Github Project as a Dependency in SBT
Last updated:- Git clone the project
- Add sbt-assembly to the project you've cloned
- Package the whole thing into a single (fat) JAR
- Move the generated JAR file to your own project
TL;DR Clone project, use sbt-assembly to generate the JAR and add it as an unmanaged dependency. See working code here (project your want to import) and here(your project)
You probably know by know that Java and Scala aren't like interpreted languages where the dependencies are source code.
Dependencies for Java and Scala are JAR files so you can't just add a github project as a dependency to your code because the project needs to be compiled into a JAR for you to use it.
Git clone the project
The github project should be a valid SBT project
$ git clone https://github.com/some-username/some-project-name.git
Add sbt-assembly to the project you've cloned
The project you want to depend on might have its own dependencies and so on and, since you may not have it in your own code, you need to include them in the packaged JAR as well. We'll use sbt-assembly for that.
It's likely the project doesn't itself include sbt-assembly so create a file under some-project-name/project/
called assembly.sbt
and add the following content:
// some-project-name/project/assembly.sbt
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3")
Package the whole thing into a single (fat) JAR
It's called a fat JAR file because it includes all of its dependencies along with it.
$ cd some-project-name
some-project-name$ sbt assembly
This command will generate a JAR file probably at this location::
some-project-name/target/scala-2.11/some-project-name-assembly-1.0.jar
(this will be different depending on whether you are using Scala 2.10 vis-a-vis 2.11 and if you have a different version string)
Move the generated JAR file to your own project
Now you need to copy the JAR file you generated in the previous step to your actual project.
To add the generated JAR file to your own project so that you can use it, place it under my-sbt-project/lib/
, which is where SBT looks for unmanaged dependency JARs (i.e. those that aren't at maven central or somewhere like that.)
Instead of manually placing the generated JAR in your project, you can upload it to a repository like Bintray, for free: Publishing an SBT Project onto Bintray: an Example
$ ls my-sbt-project/lib
some-project-name-assembly-1.0.jar
One you do this, you will be able to import packages and classes from some-project-name
in your project, and use them.