John <[email protected]> writes:
> Hi Rob,
>
> I made the changes src/leiningen/jar.clj that you suggested.
> Then issued the commands:
>
> E:\etc\clojure\Leiningen\lein.py clean
> E:\etc\clojure\Leiningen\lein.py deps
> E:\etc\clojure\Leiningen\lein.py compile
> E:\etc\clojure\Leiningen\lein.py jar
> E:\etc\clojure\Leiningen\lein.py uberjar
>
> and they all work to compile the new Leiningen.
> (Fyi, I originally didn’t have the 'lein.py deps' step
> and this seems to be essential, in my case.)
>
> Then in the python script (lein.py), I set
>
> LEIN_JAR = expanduser("E:/keep/eclipse/3.5/git-leiningen/src/
> leiningen-standalone.jar")
> CLOJURE_JAR = expanduser("E:/keep/eclipse/3.5/git-leiningen/src/lib/
> clojure-1.1.0-master-20091218.160125-7.jar")
>
> i.e. to point at the newly compiled leiningen and the version of
> clojure
> that it downloaded into its 'lib' folder.
>
> I then tried the simple example at
> http://zef.me/2470/building-clojure-projects-with-leiningen
> using this project.clj
>
> (defproject helloworld "0.1"
> :dependencies [[org.clojure/clojure "1.1.0-master-SNAPSHOT"]
> [org.clojure/clojure-contrib "1.0-SNAPSHOT"]]
> :main helloworld)
>
> to correspond to the project.clj in E:/keep/eclipse/3.5/git-leiningen/
> src
> which contains
>
> (defproject leiningen "1.1.0-SNAPSHOT"
> :description "A build tool designed not to set your hair on fire."
> :url "http://github.com/technomancy/leiningen"
> :dependencies [[org.clojure/clojure "1.1.0-master-SNAPSHOT"]
> [org.clojure/clojure-contrib "1.0-SNAPSHOT"]
> [ant/ant-launcher "1.6.2"]
> [jline "0.9.94"]
> [org.apache.maven/maven-ant-tasks "2.0.10"]]
> :dev-dependencies [[leiningen/lein-swank "1.0.0-SNAPSHOT"]]
> :main leiningen.core)
>
> I am able to compile the helloworld example:
>
> E:\keep\clojure\helloworld>E:\etc\clojure\Leiningen\lein.py compile
> [copy] Copying 2 files to E:\keep\clojure\helloworld\lib
> Compiling helloworld
>
> But 'lein.py uberjar' or 'lein.py jar' both produce stange errors:
>
> E:\keep\clojure\helloworld>E:\etc\clojure\Leiningen\lein.py uberjar
> Wrong number of arguments to task uberjar.
> E:\keep\clojure\helloworld>E:\etc\clojure\Leiningen\lein.py jar
> Wrong number of arguments to task jar.
Are you really sure that function `copy-to-jar` looks exactly like this:
<code>
(defmethod copy-to-jar :path [project jar-os spec]
(doseq [child (file-seq (file (:path spec)))]
(when-not (.isDirectory child)
(let [path (unix-path (str child))
path (re-sub (re-pattern (str "^" (unix-path (:root project))))
"" path)
path (re-sub #"^/resources" "" path)
path (re-sub #"^/classes" "" path)
path (re-sub #"^/src" "" path)
path (re-sub #"^/" "" path)]
(.putNextEntry jar-os (JarEntry. path))
(copy child jar-os)))))
</codec>
I mean `unix-path` function is called twice not only once.
In order to see what is exactly the problem you need to comment out
`try-except` clause in core.clj in "-main" function.
>
> and so does 'lein.py new'
>
> E:\keep\clojure\helloworld>E:\etc\clojure\Leiningen\lein.py new
> Wrong number of arguments to task new.
And this message is totally OK. "new" command requires at least one
argument, e.g. project name:
lein.py new test_proj
But see below.
> E:\keep\clojure\helloworld>E:\etc\clojure\Leiningen\lein.py version
> Leiningen nil on Java 1.6.0_18-ea Java HotSpot(TM) Client VM
>
> This seems to be a different issue (possibly with the lein.py
> script?).
> Any pointers would be very welcome.
But there is still problem with passing arguments from windows
command line to leiningen. All arguments are considered as one
by Leiningen, so:
lein.py "new" "test_proj"
means for Leiningen:
lein.py "new test_proj"
I'm starting to think that it would be
nice to call leiningen as regular jar (I mean adding leiningen.clj
with "-main" function). Using "clojure.main" and "-e" is really
difficult on Windows.
@Phil what do you think about it?
Anyway I came up with this not very elegant soultion:
# part of lein.py
<code>
def run_leiningen(argv):
def escape_arg(s):
return s.replace("\\", "\\\\").replace("\"", "\\\"")
ARGS = ['"' + 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[0])
if len(ARGS) == 2:
CMD = ("java -Xbootclasspath/a:%s -client -cp %s clojure.main" \
+ " -e \"(use 'leiningen.core) (-main \\\"%s\\\" \\\"%s\\\")\"")
\
% (quote_cp([CLOJURE_JAR]), quote_cp(CLASSPATH), ARGS[0],
ARGS[1])
elif len(ARGS) == 3:
CMD = ("java -Xbootclasspath/a:%s -client -cp %s clojure.main" \
+ " -e \"(use 'leiningen.core) (-main \\\"%s\\\" \\\"%s\\\"
\\\"%s\\\")\"") \
% (quote_cp([CLOJURE_JAR]), quote_cp(CLASSPATH),
ARGS[0], ARGS[1], ARGS[2])
system(CMD)
</code>
I hope there is no command which requires more than 2 arguments. ;)
And now I managed to do what you were trying:
c:\src\clojure\test>c:\tools\bin\lein.py new test_proj
Created new project in: test_proj
c:\src\clojure\test>dir test_proj
2009-12-20 19:29 <DIR> .
2009-12-20 19:29 <DIR> ..
2009-12-20 19:29 56 .gitignore
2009-12-20 19:29 173 project.clj
2009-12-20 19:29 119 README
2009-12-20 19:29 <DIR> src
2009-12-20 19:29 <DIR> test
C:\src\clojure\test\helloworld>dir
2009-12-20 19:31 <DIR> .
2009-12-20 19:31 <DIR> ..
2009-12-20 19:05 187 project.clj
2009-12-20 19:06 <DIR> src
C:\src\clojure\test\helloworld>c:\tools\bin\lein.py compile
[copy] Copying 2 files to C:\src\clojure\test\helloworld\lib
Compiling helloworld
C:\src\clojure\test\helloworld>c:\tools\bin\lein.py jar
C:\src\clojure\test\helloworld>c:\tools\bin\lein.py uberjar
Including helloworld.jar
Including clojure-1.1.0-master-20091218.160125-7.jar
Including clojure-contrib-1.0-20091212.214557-33.jar
C:\src\clojure\test\helloworld>dir
2009-12-20 19:33 <DIR> .
2009-12-20 19:33 <DIR> ..
2009-12-20 19:32 <DIR> classes
2009-12-20 19:33 5 261 247 helloworld-standalone.jar
2009-12-20 19:33 5 498 helloworld.jar
2009-12-20 19:32 <DIR> lib
2009-12-20 19:05 187 project.clj
2009-12-20 19:06 <DIR> src
HTH,
Rob
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en