John <john.b.ga...@gmail.com> 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 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