Comments (8)
wrt docs: That sounds good, I will add that.
wrt patching transport.clj
:
Everything works fine as a normal uberjar. nrepl itself isn't the problem.
When trying to build the Graal native image with the 25ms startup time, Graal does something weird with the bytecode produced by locking
that fails when trying to lock on an object closed over by a fn, so I patched it to lock on a global var instead. This issue (or at least this error) comes up frequently when using Graal with Clojure, so I had to patch tools.cli as well. Hopefully the next release of Graal will fix it.
lein repl
is somehow injecting a different version of nrepl - I don't understand how - so then I can't run the repl for development. I get No such var: nrepl.transport/uri-scheme
. That's why I need the older leiningen, which uses tools.nrepl version so they do not conflict. I could use the same version of nrepl as leiningen, but that seems brittle and like it would mask the issue.
It's possible that I could patch nrepl to use agents instead of locking for serializing calls to .write, but having the extra threads just to write seems icky.
from rep.
lein repl is somehow injecting a different version of nrepl - I don't understand how - so then I can't run the repl for development. I get No such var: nrepl.transport/uri-scheme. That's why I need the older leiningen, which uses tools.nrepl version so they do not conflict. I could use the same version of nrepl as leiningen, but that seems brittle and like it would mask the issue.
When do you get this? I'm pretty certain that should be working with nREPL 0.5.3 and Lein 2.8.3.
from rep.
[jfelice@C02X421DJHD4 rep(develop)]$ lein version
Leiningen 2.8.3 on Java 1.8.0_192 GraalVM 1.0.0-rc10
[jfelice@C02X421DJHD4 rep(develop)]$ lein repl
Reflection warning, nrepl/middleware/interruptible_eval.clj:125:43 - reference to field getCause can't be resolved.
Reflection warning, nrepl/middleware/load_file.clj:87:43 - reference to field recv on java.lang.Object can't be resolved.
Reflection warning, nrepl/middleware/load_file.clj:88:51 - call to method recv on java.lang.Object can't be resolved (no such method).
Reflection warning, nrepl/middleware/load_file.clj:93:32 - call to method send on java.lang.Object can't be resolved (no such method).
Reflection warning, nrepl/server.clj:135:25 - reference to field getLocalPort can't be resolved.
Exception in thread "main" Syntax error compiling at (/private/var/folders/pq/k0s7p0bx7lz9nn1sk5h3nzymty834y/T/form-init9107981317154113190.clj:1:2804).
at clojure.lang.Compiler.analyze(Compiler.java:6808)
at clojure.lang.Compiler.analyze(Compiler.java:6745)
at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3820)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:7108)
at clojure.lang.Compiler.analyze(Compiler.java:6789)
at clojure.lang.Compiler.analyze(Compiler.java:6745)
at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3888)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:7108)
at clojure.lang.Compiler.analyze(Compiler.java:6789)
at clojure.lang.Compiler.analyze(Compiler.java:6745)
at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3888)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:7108)
at clojure.lang.Compiler.analyze(Compiler.java:6789)
at clojure.lang.Compiler.analyze(Compiler.java:6745)
at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6118)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:7106)
at clojure.lang.Compiler.analyze(Compiler.java:6789)
at clojure.lang.Compiler.analyze(Compiler.java:6745)
at clojure.lang.Compiler$IfExpr$Parser.parse(Compiler.java:2829)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:7106)
at clojure.lang.Compiler.analyze(Compiler.java:6789)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:7094)
at clojure.lang.Compiler.analyze(Compiler.java:6789)
at clojure.lang.Compiler.analyze(Compiler.java:6745)
at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6118)
at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:6436)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:7106)
at clojure.lang.Compiler.analyze(Compiler.java:6789)
at clojure.lang.Compiler.analyze(Compiler.java:6745)
at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6120)
at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5467)
at clojure.lang.Compiler$FnExpr.parse(Compiler.java:4029)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:7104)
at clojure.lang.Compiler.analyze(Compiler.java:6789)
at clojure.lang.Compiler.eval(Compiler.java:7173)
at clojure.lang.Compiler.eval(Compiler.java:7166)
at clojure.lang.Compiler.eval(Compiler.java:7166)
at clojure.lang.Compiler.load(Compiler.java:7635)
at clojure.lang.Compiler.loadFile(Compiler.java:7573)
at clojure.main$load_script.invokeStatic(main.clj:452)
at clojure.main$init_opt.invokeStatic(main.clj:454)
at clojure.main$init_opt.invoke(main.clj:454)
at clojure.main$initialize.invokeStatic(main.clj:485)
at clojure.main$null_opt.invokeStatic(main.clj:519)
at clojure.main$null_opt.invoke(main.clj:516)
at clojure.main$main.invokeStatic(main.clj:598)
at clojure.main$main.doInvoke(main.clj:561)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.lang.Var.applyTo(Var.java:705)
at clojure.main.main(main.java:37)
Caused by: java.lang.RuntimeException: No such var: nrepl.transport/uri-scheme
at clojure.lang.Util.runtimeException(Util.java:221)
at clojure.lang.Compiler.resolveIn(Compiler.java:7387)
at clojure.lang.Compiler.resolve(Compiler.java:7357)
at clojure.lang.Compiler.analyzeSymbol(Compiler.java:7318)
at clojure.lang.Compiler.analyze(Compiler.java:6768)
... 49 more
from rep.
I'm using 0.5.1
though... somehow with lein repl
, I'm getting a different version side-loaded. (If I could tell lein repl
which version to use, that would be great! I haven't been able to find any options that it would honor.)
from rep.
Do you have something in profiles? Or project.clj? Or some dep pulling the older nREPL version?
0.5.1 doesn't have this var, it was added only in 0.5.3. But 0.5.3 is hard dependency of Lein 2.8.3, which really puzzles me.
from rep.
(If I could tell lein repl which version to use, that would be great!
Adding an nREPL dep to your :repl
profile should do this, btw.
from rep.
@bbatsov right... OK, let's back up :) ...
I have 0.5.1 as a project dependency for rep, and I have copied transport.clj
from 0.5.1 into my source directory and changed it to make it work with Graal. lein repl
is loading 0.5.3, but since my hacked 0.5.1 transport.clj
is on my source path, it overrides just the transport.clj from 0.5.3, hence the exception above. (my 0.5.1 doesn't have uri-scheme, 0.5.3 does have it, and presumably nrepl.core or something calls transport/uri-scheme
).
I could upgrade my hacked transport.clj
to 0.5.3's version, and this would work, since the versions would match. The problem, though, is this is brittle because it means that I'm running my tests with a version of nrepl that's coming from somewhere I don't control, even though builds use the version I specify. The next time lein repl
decides to use a new version, it would break.
I've just tried adding :profiles {:repl {:dependencies [[nrepl/nrepl "0.5.1"']]}}
to my project.clj
and I still get the exception. I've also tried lein pprint
to show me what profile is adding nrepl 0.5.3, and it doesn't show me 0.5.3 anywhere. Which I take to mean that the version to side-load is hard-coded somewhere in leiningen.
If leiningen is somehow enforcing that 0.5.3 is the minimum version (instead of the precise version), and otherwise project dependencies used, that would be neat. I could upgrade the project to 0.5.3 and not worry about things not working later.
from rep.
(Note: just upgraded it to 0.5.3, but I think I need to pin leiningen to 2.8.3 now, right?)
from rep.
Related Issues (11)
- Long operations HOT 4
- Add to Nix Packages HOT 4
- pprint the result HOT 2
- Guix alnog Nix? HOT 1
- Doesn't resolve nrepl port from nested folder, by default HOT 1
- Add REPL buffer to kakoune HOT 5
- Kakoune integration silently fails if detected namespace is not required HOT 3
- Publish new binaries on GitHub?
- I wish there was a version for Windows as well. HOT 2
- Insallation not working HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rep.