Mike K <mbk.li...@gmail.com> writes: > All, > > I tried to use this script on Windows and it blew up real good! I'm a > Clojure, Java, and Leiningen newbie, so perhaps a kind soul can help > me out. > > 1. lein self-install "worked". It downloaded leiningen-1.0.0- > standalone.jar. However, that contradicts the description at > http://zef.me/2470/building-clojure-projects-with-leiningen which > indicates that self-install should download several jars, including > clojure itself. That didn't happen, and it looks like it would never > happen according to the python script. Also, I'd rather use one and > only one clojure, clojure-contrib, etc. for everything rather than > Leiningen using its own. Is this possible?
As you have already found out you need only standalone leiningen jar, which is downloaded by "lein.py". > 2. Any other lein command seems to require the clojure jar in the > repository ~/.m2/repository/org/clojure/clojure/1.1.0-alpha-SNAPSHOT/ > clojure-1.1.0-alpha-SNAPSHOT.jar. Since I don't have one there, I > modified CLOJURE_JAR to point to my existing jar. Everything still > fails with this sort of error: > > lein help > java.lang.NoClassDefFoundError: Files > Caused by: java.lang.ClassNotFoundException: Files > at java.net.URLClassLoader$1.run(URLClassLoader.java:200) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(URLClassLoader.java:188) > at java.lang.ClassLoader.loadClass(ClassLoader.java:303) > at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) > at java.lang.ClassLoader.loadClass(ClassLoader.java:248) > at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) > Could not find the main class: Files. Program will exit. > Exception in thread "main" > > I suspect the suspicious "Files" class name is coming from the fact > that I now have CLOJURE_JAR set as follows: > > CLOJURE_JAR = expanduser("C:\\Program Files (x86)\\Clojure Box\\clojure > \\clojure-1.0.0.jar") > > Looks like I'm getting bit by spaces in the path name. This would not > be an issue if lein had downloaded its own clojure jar during step 1 > (no spaces in that path). Yes, there are some escaping problems on Windows. I changed a little bit "lein.py" and this worked for me on Windows and Linux: <lein.py> #!/usr/bin/env python import sys from glob import glob from os import makedirs, system, getenv from os.path import expanduser, dirname, exists from urllib import urlretrieve ### inits VERSION = "1.0.0" if sys.platform == "win32": CP_SEP = ";" else: CP_SEP = ":" LEIN_JAR = expanduser("~/.m2/repository/leiningen/leiningen/%s/leiningen-%s-standalone.jar" % (VERSION, VERSION)) CLOJURE_JAR = expanduser("~/.m2/repository/org/clojure/clojure/1.1.0-alpha-SNAPSHOT/clojure-1.1.0-alpha-SNAPSHOT.jar") CPS = glob("lib/*") LEIN_URL = "http://repo.technomancy.us/leiningen-%s-standalone.jar"; % (VERSION) # leiningen installation checks LEIN_BIN_DIR = dirname(sys.argv[0]) if exists(LEIN_BIN_DIR + "../src/leiningen/core.clj"): # running from source-checkout LEIN_LIBS = glob(LEIN_BIN_DIR + "/*") CLASSPATH = CPS + [LEIN_LIBS] if len(LEIN_LIBS) < 1 and sys.argv[1] != 'self-install': print "Your Leiningen development checkout is missing its dependencies." print "Please download a stable version of Leiningen to fetch the deps." print "See the \"Hacking\" section of the readme for details." exit(1) else: # not running from a checkout CLASSPATH = CPS + [LEIN_JAR] if not exists(LEIN_JAR) and sys.argv[1] != 'self-install': print "Leiningen is not installed. Please run \"lein self-install\"." exit(1) if getenv("DEBUG"): print CP_SEP.join(CLASSPATH) ### defs def quote_cp(cp): return CP_SEP.join("\"%s\"" % p for p in cp) def download_lein_jar(): # TODO: wget / curl? print("downloading %s -> %s ..." % (LEIN_URL, LEIN_JAR)), sys.stdout.flush() LEIN_JAR_DIR = dirname(LEIN_JAR) if not exists(LEIN_JAR_DIR): makedirs(LEIN_JAR_DIR) # 'urlretrieve' is incrediblly slow! but it is portable anyway... urlretrieve(LEIN_URL, LEIN_JAR) print("done") def start_repl(argv): # TODO: rlwrap? cp = ['src', 'classes'] + CLASSPATH CMD = 'java -cp %s clojure.main %s' % (quote_cp(cp), " ".join(argv)) system(CMD) def run_leiningen(argv): def escape_arg(s): return s.replace("\\", "\\\\").replace("\"", "\\\"") ARGS = " ".join([ '"' + escape_arg(s) + '"' for s in argv ]) CMD = "java -Xbootclasspath/a:%s -client -cp %s clojure.main -e \"(use 'leiningen.core) (-main \\\"%s\\\")\"" \ % (quote_cp([CLOJURE_JAR]), quote_cp(CLASSPATH), ARGS) system(CMD) ### main if __name__ == '__main__': if len(sys.argv) > 1 and sys.argv[1] == 'self-install': download_lein_jar() elif len(sys.argv) > 1 and sys.argv[1] == 'repl': start_repl(sys.argv[2:]) else: run_leiningen(sys.argv[1:]) ### EOF </lein.py> > > 3. My clojure jar is clojure-1.0.0.jar from clojure org. The script > uses clojure-1.1.0-alpha-SNAPSHOT.jar, but a comment from the link > implies that this has been supplanted by 1.1.0-master.jar. In any > event, I don't know where either of these two things are. I tried > going to build.clojure.org, but all the build artifiacts there are > named clojure.jar. > > 4. BTW, what's the deal with this ".m2" directory (i.e., where does > the name come from)? It comes from maven world: http://maven.apache.org/ > > Thanks for any help you can provide! > > Mike HTH, Rob -- 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