--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@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+u...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Congrats on the release! It's exciting to see this vision move forward. Wondering if the logical next step is the npm style of trees of duplicate transitive git deps. In general, how is this going to work for transitive deps?
Specifically, I'm asking about how to resolve duplicate transitive dependencies to actual code, possibly referring to the same lib repo at different git hashes, or different git repos.
I think you answered, 'how do you get a single graph of deps nodes given different kinds of deps'?For example:A->B->C#some_tagA->D->C#other_tagSo, assuming you use a lot of git deps, which I think is the long-term intent here based on the messaging, resolving those pointers to actual loaded code is a potential problem that needs to be addressed somehow. I mentioned one way, which is to have multiple copies of a lib loaded automatically.
From what I can tell so far, it seems like you can override a dep's specific transitive deps, but that sounds painful when scaled out over number of deps and how many more commit hashes exist than maven release tags for each lib.
2 questions :
- where do dependencies get downloaded ? `~/.m2` ? It depends on the procurer (mvn/git/etc.)
- does it work for Cljs ? What does it mean for Cljs ?
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@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+u...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
> git deps go to .gitlibs.Would you consider not putting them in the root of the user's home directory? All the major OS's (and probably the minor ones too) have dedicated folders to put caches. I've opened https://dev.clojure.org/jira/browse/TDEPS-30 with more details on this.
~/work/fred > cat deps.edn{:deps{github-clj-time/clj-time{:git/url "https://github.com/clj-time/clj-time" :rev "cce58248"}}}~/work/fred > cljError building classpath. Manifest type :lein not loaded when finding deps for github-clj-time/clj-time in coordinate {:git/url "https://github.com/clj-time/clj-time", :rev "cce58248937bc05452ebfc8b65134961227a554e", :deps/manifest :lein, :deps/root "/home/alan/.gitlibs/libs/github-clj-time/clj-time/cce58248937bc05452ebfc8b65134961227a554e"}
Im probably not typical for this but I really value the ability to override the location of where they’re placed. I actually commit my deps to SCM for production code. The internet is fast enough these days that i don’t care about a common code cache. I’m more interested in a reproducible build.
On Sat, 6 Jan 2018 at 11:25, Alex Miller <al...@puredanger.com> wrote:
> On Jan 6, 2018, at 5:43 AM, Khalid Jebbari <khalid....@gmail.com> wrote:
>
> Great news, great work ! Soon running Clojure will be dead easy.
>
> 2 questions :
> - where do dependencies get downloaded ? `~/.m2` ? It depends on the procurer (mvn/git/etc.)
It depends. Maven deps go to .m2, git deps go to .gitlibs.
> - does it work for Cljs ? What does it mean for Cljs ?
This is targeted at launching Clojure programs. ClojureScript itself is a Clojure program, so it’s relevant in that sense.
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@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
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--- sent from my mobile
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@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
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscribe@googlegroups.com.
Not sure I would want to see duplicates either. If my code breaks because of an old dependency I’d rather that than make the false assumption that I’m running securely with the latest version of a lib.
Hey - I love the idea. However, I'm getting an error message trying to run the example:~/work/fred > cat deps.edn{:deps{github-clj-time/clj-time{:git/url "https://github.com/clj-time/clj-time" :rev "cce58248"}}}~/work/fred > cljError building classpath. Manifest type :lein not loaded when finding deps for github-clj-time/clj-time in coordinate {:git/url "https://github.com/clj-time/clj-time", :rev "cce58248937bc05452ebfc8b65134961227a554e", :deps/manifest :lein, :deps/root "/home/alan/.gitlibs/libs/github-clj-time/clj-time/cce58248937bc05452ebfc8b65134961227a554e"}
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@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+u...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
I strongly agree with your decision of “pick the latest”. While I do understand multiple active versions can make it easier for a developer I don’t think that’s the “right” decision. Besides I can only imagine how much of a pain it would be to implement reliably. I’d expect if I specify a patched version of struts that a transitive dependency wouldn’t have the ability to override that for its own purpose.
Have you considered adding an equivalent to lein’s pedantic option, i.e. an option that would die on ambiguous versions rather than make a choice, thereby forcing users to make that choice explicit as a top-level entry? (Or through exclusions etc.)
As an aside, is it even possible on the JVM to have multiple versions of a dependency loaded? Wouldn’t the last version loaded override all the common classes, leaving you with a sort of hybrid that doesn’t correspond to any single version?
I’d really like a dependency system that makes each dep’s transitive dependencies only visible to itself, so there would never be any reason to resolve dependencies.
Also, how realistic do you think it is today to expect all of our transitive dependencies to be developed according to that growth mindset you mention? It’s one thing to adopt it in my code, but quite another to assume it’s followed correctly by all of the underlying Java libs.
I’d really like a dependency system that makes each dep’s transitive dependencies only visible to itself, so there would never be any reason to resolve dependencies.You need classloader support for this and indeed this is what OSGi and some early versions of the Java module system do. Working in that kind of environment is very constraining. A lot of discipline is required with respect to your interfaces between loaders and in general I think it's way too much of a burden to use as the normal operating mode (which is one reason you don't see it in the Java module system of java 9). It is a good option for systems where you want users to plug in functionality and the scope of those interface points is small and highly controlled.