Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Clojure & ZeroMQ

Tags:

clojure

zeromq

Can anyone tell me some working dependencies to get up and running with zeromq and clojure?

I've tried several but leiningen isn't able to fetch them:

(Could not find artifact org.zmq:zmq:jar:2.1.0 in central (http://repo1.maven.org/maven2))

[org.zmq/zmq "2.1.0"]
[org.zmq/jzmq "1.0.0"]

I have compiled jzmq (/usr/local/share/java/jzmq.jar) and added this to my project.clj:

:native-path  "/usr/local/lib"
like image 471
DanS Avatar asked Nov 06 '12 22:11

DanS


People also ask

What is Clojure used for?

Clojure is designed to be a hosted language, sharing the JVM type system, GC, threads etc. All functions are compiled to JVM bytecode. Clojure is a great Java library consumer, offering the dot-target-member notation for calls to Java. Clojure supports the dynamic implementation of Java interfaces and classes.

Why is Clojure not popular?

Clojure may not find much popularity since it lacks sufficient Clojure-based libraries and frameworks, compared to other applications worth consideration. The lisp syntax of Clojure is also more difficult to read, and therefore could stir being unfamiliar with the tool.

Is Clojure better than Java?

Because Clojure has interoperability with Java, there is a high dependency on the Java libraries rather than libraries written in Clojure. So, even though Clojure is a practical and functional language, most programs use Java libraries that tend to be less functional and have other side effects.

Is Clojure better than Python?

Clojure and Python can be primarily classified as "Languages" tools. "It is a lisp", "Concise syntax" and "Persistent data structures" are the key factors why developers consider Clojure; whereas "Great libraries", "Readable code" and "Beautiful code" are the primary reasons why Python is favored.


2 Answers

There's a 2.0-SNAPSHOT here:

Lein should already have the clojars repo loaded.

like image 79
Vaughn Dickson Avatar answered Sep 25 '22 14:09

Vaughn Dickson


What I propose is a mixture of what's already been proposed, but for the sake of completeness and hopefully to give a final answer I give it a try.

Since the dependency is not in the online repos I would include the jar(s) in the project's directory structure itself, e.g. in the directory repository and keep it in the source control system as the other files of the project. It's an important part of the project and without the dependency it won't run.

In this directory I would save the jar with the help of Maven Install plugin.

mvn install:install-file \
    -Dfile=/usr/local/share/java/jzmq.jar \
    -DgroupId=org.zeromq \
    -DartifactId=jzmq \
    -Dversion=2.1.0 \
    -Dpackaging=jar \
    -DlocalRepositoryPath=repository

When the jar file gets copied to the local repository, you define it and the dependency in project.clj as follows:

(defproject clojure-interal-repo-test "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [org.zeromq/jzmq "2.1.0"]]
  :repositories [["zeromq-repository" {:url       "file:repository"
                                       :snapshots false
                                       :checksum  :ignore
                                       :update    :never}]])

Within the project, run lein2 deps :tree to verify its correctness.

$ lein2 deps :tree
Retrieving org/zeromq/jzmq/2.1.0/jzmq-2.1.0.jar (4k) from file:repository/
 [org.clojure/clojure "1.4.0"]
 [org.zeromq/jzmq "2.1.0"]

Please note that the 4k above is the size of a fake file I created to test it out.

Read the document Repeatability in Leiningen's wiki should you need a bit more.

like image 45
Jacek Laskowski Avatar answered Sep 21 '22 14:09

Jacek Laskowski