I'm running into a problem with environment variables and classpaths on Windows.
I have a file .cp1
which contains a classpath. I want to put this classpath in an environment variable FOO.
C:\Temp\buddy\pod-babashka-buddy>type .cp1
src;C:\Users\borkdude\.gitlibs\libs\babashka\pods\22f200ef3006da90971e3bafa794985918b65fea\src;C:\Users\borkdude\.m2\repository\buddy\buddy-core\1.9.0\buddy-core-1.9.0.jar;C:\Users\borkdude\.m2\repository\com\cognitect\transit-clj\1.0.324\transit-clj-1.0.324.jar;C:\Users\
borkdude\.m2\repository\nrepl\bencode\1.1.0\bencode-1.1.0.jar;C:\Users\borkdude\.m2\repository\org\clojure\clojure\1.10.2-rc1\clojure-1.10.2-rc1.jar;C:\Users\borkdude\.m2\repository\cheshire\cheshire\5.10.0\cheshire-5.10.0.jar;C:\Users\borkdude\.m2\repository\commons-code
c\commons-codec\1.15\commons-codec-1.15.jar;C:\Users\borkdude\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.67\bcpkix-jdk15on-1.67.jar;C:\Users\borkdude\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.67\bcprov-jdk15on-1.67.jar;C:\Users\borkdude\.m2\repository\com\cog
nitect\transit-java\1.0.343\transit-java-1.0.343.jar;C:\Users\borkdude\.m2\repository\org\clojure\core.specs.alpha\0.2.44\core.specs.alpha-0.2.44.jar;C:\Users\borkdude\.m2\repository\org\clojure\spec.alpha\0.2.187\spec.alpha-0.2.187.jar;C:\Users\borkdude\.m2\repository\co
m\fasterxml\jackson\core\jackson-core\2.10.2\jackson-core-2.10.2.jar;C:\Users\borkdude\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.10.2\jackson-dataformat-cbor-2.10.2.jar;C:\Users\borkdude\.m2\repository\com\fasterxml\jackson\dataformat\jacks
on-dataformat-smile\2.10.2\jackson-dataformat-smile-2.10.2.jar;C:\Users\borkdude\.m2\repository\tigris\tigris\0.1.2\tigris-0.1.2.jar;C:\Users\borkdude\.m2\repository\javax\xml\bind\jaxb-api\2.3.0\jaxb-api-2.3.0.jar;C:\Users\borkdude\.m2\repository\org\msgpack\msgpack\0.6.
12\msgpack-0.6.12.jar;C:\Users\borkdude\.m2\repository\com\googlecode\json-simple\json-simple\1.1.1\json-simple-1.1.1.jar;C:\Users\borkdude\.m2\repository\org\javassist\javassist\3.18.1-GA\javassist-3.18.1-GA.jar
C:\Temp\buddy\pod-babashka-buddy>set /P FOO=<.cp1
C:\Temp\buddy\pod-babashka-buddy>echo %FOO%
src;C:\Users\borkdude\.gitlibs\libs\babashka\pods\22f200ef3006da90971e3bafa794985918b65fea\src;C:\Users\borkdude\.m2\repository\buddy\buddy-core\1.9.0\buddy-core-1.9.0.jar;C:\Users\borkdude\.m2\repository\com\cognitect\transit-clj\1.0.324\transit-clj-1.0.324.jar;C:\Users\
borkdude\.m2\repository\nrepl\bencode\1.1.0\bencode-1.1.0.jar;C:\Users\borkdude\.m2\repository\org\clojure\clojure\1.10.2-rc1\clojure-1.10.2-rc1.jar;C:\Users\borkdude\.m2\repository\cheshire\cheshire\5.10.0\cheshire-5.10.0.jar;C:\Users\borkdude\.m2\repository\commons-code
c\commons-codec\1.15\commons-codec-1.15.jar;C:\Users\borkdude\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.67\bcpkix-jdk15on-1.67.jar;C:\Users\borkdude\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.67\bcprov-jdk15on-1.67.jar;C:\Users\borkdude\.m2\repository\com\cog
nitect\transit-java\1.0.343\transit-java-1.0.343.jar;C:\Users\borkdude\.m2\repository\org\clojure\core.specs.alpha\0.2.44\core.specs.alpha-0.2.44.jar;C:\Users\borkdude\.m2\repository\org\clojure\spec.alpha\0
Somehow the classpath is cut off.Does anyone know what is happening here?
It seems it's being cut off at 1024
I'm going to work around this using an uberjar (depstar)
is this not the long classpath issue on windows? https://github.com/sogaiu/clj-pathing-jar
No, this time it's a limitation with environment variables on Windows.
As an experiment, try creating a file with one line with more than 1024 chars (without newlines)
and then: set /P FOO=<file.txt
and then: echo %FOO%
Fun. Now I'm getting:
main] INFO hf.depstar.uberjar - Compiling pod.babashka.buddy ...
Execution error at clojure.main/main (main.java:40).
Invalid token: C:
Full report at:
C:\Users\appveyor\AppData\Local\Temp\1\clojure-3649748013505680792.edn
[main] ERROR hf.depstar.uberjar - Compilation of pod.babashka.buddy failed!
This is my deps.edn:
{:deps {com.cognitect/transit-clj {:mvn/version "1.0.324"}
buddy/buddy-core {:mvn/version "1.9.0"}
nrepl/bencode {:mvn/version "1.1.0"}
babashka/pods {:git/url "<https://github.com/babashka/pods>"
:sha "22f200ef3006da90971e3bafa794985918b65fea"}}
:aliases {:uberjar
{:replace-deps ; tool usage is new in 2.x
{seancorfield/depstar {:mvn/version "2.0.161"}}
:ns-default hf.depstar
:exec-fn uberjar
:exec-args {:jar pod-babashka-buddy.jar
:compile-ns [pod.babashka.buddy]}}
:native {:jvm-opts ["-Dclojure.compiler.direct-linking=true"]
:extra-deps {org.clojure/clojure {:mvn/version "1.10.2-rc1"}}}}}
This might have to do with depstar shelling out and not quoting things properly on Windows. Are you aware of that issue @seancorfield? I fixed it in deps.clj: https://github.com/borkdude/deps.clj/blob/master/src/borkdude/deps.clj#L144-L155
(I apply the same fix in babashka.process: https://github.com/babashka/process/blob/ac1219508857d4b3106e5a7999a3573c61c7aa63/src/babashka/process.clj#L101)
If you want to reproduce on Windows, this is the code: https://github.com/babashka/pod-babashka-buddy
clojure -X:uberjar
should do it
@borkdude I no longer attempt to use Clojure on Windows -- I use WSL2 instead. It seems like a lot of (pointless) work to try to workaround the many limitations of the old Windows shell environment 😞
@seancorfield This is just clojure.java.shell
usage btw, not directly an issue in cmd.exe. It will manifest wherever you run Java on Windows
Oh, I saw the env var limit and thought you were talking about that.
Yes. I then worked around that issue by creating an uberjar in clojure
.
But this fails using a quotation issue when shelling out with clojure.java.shell
in depstar, at least, that is my suspicion
I have come across this issue many times, so I applied the fix in almost all of my libraries where I use clojure.java.shell
I can try a fork of your lib to see if this fixes the problem
Feel free to send a PR for depstar
.
(I figure that way you'll have tested it works for you on Windows when using depstar 🙂 )
will do!
FWIW, yes, that fixed it! https://github.com/borkdude/depstar/commit/70ce150dfd3072f8f7ffbad21233139b3cde388d
Proof: https://ci.appveyor.com/project/borkdude/pod-babashka-buddy/builds/37015612
Will do the PR tomorrow, getting way too late here
Thanks!