Managing Native Dependencies with Leiningen
This post will cover the steps required to package, deploy and use native dependencies with leiningen.
First we need to package native libs according to the spec, native libs (.so,.jnilib,.dll) will go into the native/ folder. Folder structure I used to package RxTx libs for Mac OS X is,
/native/ /native/macosx/x86/librxtxSerial.jnilib /native/macosx/x86_64/librxtxSerial.jnilib
The naming convention is important.
Platforms: --------------------- Mac OS X -> macosx Windows -> windows Linux -> linux SunOS" -> solaris Architectures -------------------- amd64 -> x86_64 x86_64 -> x86_64 x86 -> x86 i386 -> x86 arm -> arm sparc -> sparc
Next step is to Jar them up,
jar -cMf rxtx-macosx-native-deps-2.1.7.jar native
Before we push to clojars we need to create a POM file for it,
<?xml version="1.0" encoding="UTF-8"?> <project> <modelVersion>2.1.7</modelVersion> <groupId>org.clojars.nakkaya</groupId> <artifactId>rxtx-macosx-native-deps</artifactId> <version>2.1.7</version> <name>RxTx</name> </project>
Then push to clojars with,
scp pom.xml rxtx-macosx-native-deps-2.1.7.jar [email protected]:
Now native dependencies are ready for deployment, assuming we want to create new project which depends on RxTx, we create a new leiningen project adding RxTx jars as dependencies,
(defproject ardu-test "0.0.1-SNAPSHOT" :dependencies [[org.clojure/clojure "1.3.0"] [org.clojars.nakkaya/rxtx "2.1.7"] [org.clojars.nakkaya/rxtx-macosx-native-deps "2.1.7"]])