> How about having a Clojure application 'package' set up a launcher
> script to launch the app with a minimal classpath, Leiningen style,
> based on some assumption regarding the whereabouts of versioned jars
> on the system? (E.g. jline-0.9.94.jar rather than jline.jar, say.)

Something along those lines was what I had in mind (rather than, as
you say, just drop everything onto the CLASSPATH). It would not be
something you want to fuss with necessarily during development, but
some standard way of "building" your application in a packaging
friendly manner.

> Note that it will never do to have dependencies handled by a system
> which isn't capable of installing several versions of the same jar
> side-by-side... I don't know what apt / rpm / ports do about Java lib
> versioning, so maybe there's no problem here?

As far as I can tell, few Java things are packaged. I suspect because
of this reason, in part. Things that are packaged tend to be those
things that depend only on the JDK itself, or on very simple
dependencies, or else major stuff like 'eclipse' which release
engineering and huge dependency trees are not your concern.

But as far as I have encountered, there is no magic solution to the
multiple-versions-of-the-same-library problem that integrate with
native OS packaging systems (that doesn't mean there are none).

Maybe for Clojure it would indeed be more desirable to have some
well-defined interface for packaging systems to use when dealing with
clojure applications. It may not be entirely trivial though. For
example with FreeBSD ports, the build step is expected to only depend
on downloading certain well-defined and checksum controlled files from
remote locations. You do not want something that arbitrarily downloads
stuff during building. I'm pretty sure similar conventions exist for
e.g. Debian.

It's a difficult problem, and I'm not blaming Clojure. Especially
since I think the Java/Clojure/Maven way of dealing with dependencies
is vastly superior to the traditional way. But the practical issue
remains that if I want to write some software that I want sysadmins in
various situations to want to use effortlessly (in my case, a backup
tool), problems like these do get in the way of choosing Clojure.

Maybe uberjars are the pragmatic approach after all. But then what
about GPL libraries and similar license hassles?

Actually, how is this dealt with in the Maven community?

-- 
/ Peter Schuller

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to