city41 / reagent-breakout

The game Breakout implemented with Reagent

Home Page:http://city41.github.io/reagent-breakout/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build failure on Windows

chrismurrph opened this issue · comments

C:\dev\reagent-breakout>lein figwheel
Figwheel: focusing on build-id 'app'
Compiling ClojureScript.
Figwheel: Starting server at http://localhost:3449
Figwheel: Serving files from '(dev-resources|resources)/public'
Compiling "resources/public/js/app.dev.js" from ("src/cljs" "env/dev/cljs")...
←[31mCompiling "resources/public/js/app.dev.js" failed.←[0m
←[31mjava.io.IOException: ←[39m←[31mThe filename, directory name, or volume label syntax is incorrect←[39m
←[34m         (Unknown Source) java.io.WinNTFileSystem.canonicalize0←[39m
←[34m         (Unknown Source) java.io.Win32FileSystem.canonicalize←[39m
←[34m         (Unknown Source) java.io.File.getCanonicalPath←[39m
←[34m         (Unknown Source) java.io.File.getCanonicalFile←[39m
←[32m              util.clj:79 cljs.util/mkdirs←[39m
←[32m          closure.clj:818 cljs.closure/write-javascript←[39m
←[32m          closure.clj:838 cljs.closure/source-on-disk←[39m
←[32m          closure.clj:872 cljs.closure/output-unoptimized[fn]←[39m
←[35m            core.clj:2559 clojure.core/map[fn]←[39m
←[36m          LazySeq.java:40 clojure.lang.LazySeq.sval←[39m

Hmmm. I unfortunately don't have a Windows box handy right now, but it looks like it's not happy with a path. There's is probably an absolute Unix path, or it's not liking the opposite slashes somewhere.

I'll try and find a Windows machine and see if I can fix this.

If you want, you can try flipping the slashes in project.clj here:

from this

  :cljsbuild {:builds {:app {:source-paths ["src/cljs"]
                             :compiler {:output-to     "resources/public/js/app.dev.js"
                                        :output-dir    "resources/public/js/out"
                                        :externs       ["react/externs/react.js"]
                                        :main          breakout/dev
                                        :asset-path    "js/out"
                                        :optimizations :none
                                        :pretty-print  true}}}}

to this

  :cljsbuild {:builds {:app {:source-paths ["src\\cljs"]
                             :compiler {:output-to     "resources\\public\\js\\app.dev.js"
                                        :output-dir    "resources\\public\\js\\out"
                                        :externs       ["react\\externs\\react.js"]
                                        :main          breakout\\dev
                                        :asset-path    "js\\out"
                                        :optimizations :none
                                        :pretty-print  true}}}}

and if it gets past the resources/public/js/app.dev.js error, then opposite slashes is the problem. But if this is the problem, getting it all the way to working might be a fair amount of work.

This is the result from just altering those five lines:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users\Chris>cd C:\dev\reagent-breakout

C:\dev\reagent-breakout>lein figwheel
java.lang.Exception: Error loading C:\dev\reagent-breakout\project.clj
at leiningen.core.project$read_raw$fn__6499.invoke (project.clj:941)
leiningen.core.project$read_raw.invoke (project.clj:938)
leiningen.core.project$read.invoke (project.clj:952)
leiningen.core.project$read.invoke (project.clj:953)
leiningen.core.main$_main$fn__6160.invoke (main.clj:388)
leiningen.core.main$_main.doInvoke (main.clj:385)
clojure.lang.RestFn.invoke (RestFn.java:408)
clojure.lang.Var.invoke (Var.java:379)
clojure.lang.AFn.applyToHelper (AFn.java:154)
clojure.lang.Var.applyTo (Var.java:700)
clojure.core$apply.invoke (core.clj:624)
clojure.main$main_opt.invoke (main.clj:315)
clojure.main$main.doInvoke (main.clj:420)
clojure.lang.RestFn.invoke (RestFn.java:436)
clojure.lang.Var.invoke (Var.java:388)
clojure.lang.AFn.applyToHelper (AFn.java:160)
clojure.lang.Var.applyTo (Var.java:700)
clojure.main.main (main.java:37)
Caused by: clojure.lang.Compiler$CompilerException: java.lang.RuntimeException:
Unsupported character: \dev, compiling:(C:\dev\reagent-breakout\project.clj:62:
0)
at clojure.lang.Compiler.load (Compiler.java:7137)
clojure.lang.Compiler.loadFile (Compiler.java:7086)
clojure.lang.RT$3.invoke (RT.java:318)
leiningen.core.project$read_raw$fn__6499.invoke (project.clj:939)
leiningen.core.project$read_raw.invoke (project.clj:938)
leiningen.core.project$read.invoke (project.clj:952)
leiningen.core.project$read.invoke (project.clj:953)
leiningen.core.main$_main$fn__6160.invoke (main.clj:388)
leiningen.core.main$_main.doInvoke (main.clj:385)
clojure.lang.RestFn.invoke (RestFn.java:408)
clojure.lang.Var.invoke (Var.java:379)
clojure.lang.AFn.applyToHelper (AFn.java:154)
clojure.lang.Var.applyTo (Var.java:700)
clojure.core$apply.invoke (core.clj:624)
clojure.main$main_opt.invoke (main.clj:315)
clojure.main$main.doInvoke (main.clj:420)
clojure.lang.RestFn.invoke (RestFn.java:436)
clojure.lang.Var.invoke (Var.java:388)
clojure.lang.AFn.applyToHelper (AFn.java:160)
clojure.lang.Var.applyTo (Var.java:700)
clojure.main.main (main.java:37)
Caused by: java.lang.RuntimeException: Unsupported character: \dev
at clojure.lang.Util.runtimeException (Util.java:221)
clojure.lang.LispReader$CharacterReader.invoke (LispReader.java:957)
clojure.lang.LispReader.readDelimitedList (LispReader.java:1138)
clojure.lang.LispReader$MapReader.invoke (LispReader.java:1081)
clojure.lang.LispReader.readDelimitedList (LispReader.java:1138)
clojure.lang.LispReader$MapReader.invoke (LispReader.java:1081)
clojure.lang.LispReader.readDelimitedList (LispReader.java:1138)
clojure.lang.LispReader$MapReader.invoke (LispReader.java:1081)
clojure.lang.LispReader.readDelimitedList (LispReader.java:1138)
clojure.lang.LispReader$MapReader.invoke (LispReader.java:1081)
clojure.lang.LispReader.readDelimitedList (LispReader.java:1138)
clojure.lang.LispReader$ListReader.invoke (LispReader.java:972)
clojure.lang.LispReader.read (LispReader.java:183)
clojure.lang.Compiler.load (Compiler.java:7125)
clojure.lang.Compiler.loadFile (Compiler.java:7086)
clojure.lang.RT$3.invoke (RT.java:318)
leiningen.core.project$read_raw$fn__6499.invoke (project.clj:939)
leiningen.core.project$read_raw.invoke (project.clj:938)
leiningen.core.project$read.invoke (project.clj:952)
leiningen.core.project$read.invoke (project.clj:953)
leiningen.core.main$_main$fn__6160.invoke (main.clj:388)
leiningen.core.main$_main.doInvoke (main.clj:385)
clojure.lang.RestFn.invoke (RestFn.java:408)
clojure.lang.Var.invoke (Var.java:379)
clojure.lang.AFn.applyToHelper (AFn.java:154)
clojure.lang.Var.applyTo (Var.java:700)
clojure.core$apply.invoke (core.clj:624)
clojure.main$main_opt.invoke (main.clj:315)
clojure.main$main.doInvoke (main.clj:420)
clojure.lang.RestFn.invoke (RestFn.java:436)
clojure.lang.Var.invoke (Var.java:388)
clojure.lang.AFn.applyToHelper (AFn.java:160)
clojure.lang.Var.applyTo (Var.java:700)
clojure.main.main (main.java:37)
C:\dev\reagent-breakout>

Then when I fixed that problem by changing main: back:

C:\dev\reagent-breakout>lein figwheel
Figwheel: focusing on build-id 'app'
Figwheel Config Error (in project.clj) - you have not configured an :output-dir
in your build
It should match this pattern: (dev-resources|resources)/public
C:\dev\reagent-breakout>

Does lein really not work out the OS? I would be surprised if that was the case - ant and sbt don't have that problem.

Leiningen does work on Windows as does Clojure and ClojureScript. It's possible that this bug is what you're seeing. If that is the case, upgrading ClojureScript to at least 2740 would fix it.

To do that, in project.clj, change [org.clojure/clojurescript "0.0-2727" :scope "provided"] to [org.clojure/clojurescript "0.0-2740" :scope "provided"]

Yes that fixed it thanks.

awesome! that was a shot in the dark :)

I liked your article http://www.mattgreer.org/articles/reagent-rocks/ - it has given me more incentive to learn Clojurescript by reading your code. I liked the idea of two different kinds of atoms, where you 'closed over' the state-like one. Is there a good place to chat about it? I will have questions. For example how come app.min.js is not made to ignored by git? - it is an output file and the deployment state should either be dev or prod.

Thanks, glad the article was helpful!

The reason app.min.js is not ignored by git is because it makes doing a GitHub pages deploy easier. It's a bit of a hack and does require you to add generated assets you normally would ignore. But by committing app.min.js (and anything else that is generated), then I can deploy a build by just doing git subtree push --prefix resources/public origin gh-pages -- I have that in deploy.sh so publishing a new version just requires making a commit, then invoking deploy.sh

I would not recommend this approach for real websites. I just do it for small GitHub pages sites.

If you have more questions, feel free to email me at matt.e.greer@gmail.com