avescodes / lein-try

A Leiningen plugin for trying out new libraries
313 stars 13 forks source link

Fallback to latest snapshot, if no releases exist #29

Open pmonks opened 7 years ago

pmonks commented 7 years ago

Steps to reproduce:

  1. lein try with a project that has only deployed snapshots, but no releases

Expected result:

Actual result:

pmonks commented 7 years ago

Here is a concrete example (which will stop being a good reproduction case once the org.symphonyoss/clj-symphony project deploys a release):

$ lein try org.symphonyoss/clj-symphony
Failed to resolve version for org.symphonyoss:clj-symphony:jar:RELEASE: Could not find metadata org.symphonyoss:clj-symphony/maven-metadata.xml in local (/Users/pmonks/.m2/repository)
This could be due to a typo in :dependencies or network issues.
If you are behind a proxy, try setting the 'http_proxy' environment variable.
Exception in thread "Thread-3" clojure.lang.ExceptionInfo: Could not resolve dependencies {:suppress-msg true, :exit-code 1}
    at clojure.core$ex_info.invokeStatic(core.clj:4617)
    at clojure.core$ex_info.invoke(core.clj:4617)
    at leiningen.core.classpath$fn__6722.invokeStatic(classpath.clj:298)
    at leiningen.core.classpath$fn__6722.invoke(classpath.clj:253)
    at clojure.lang.AFn.applyToHelper(AFn.java:165)
    at clojure.lang.AFn.applyTo(AFn.java:144)
    at clojure.core$apply.invokeStatic(core.clj:646)
    at clojure.core$memoize$fn__5708.doInvoke(core.clj:6107)
    at clojure.lang.RestFn.invoke(RestFn.java:457)
    at leiningen.core.classpath$get_dependencies.invokeStatic(classpath.clj:421)
    at leiningen.core.classpath$get_dependencies.doInvoke(classpath.clj:413)
    at clojure.lang.RestFn.invoke(RestFn.java:445)
    at clojure.lang.AFn.applyToHelper(AFn.java:160)
    at clojure.lang.RestFn.applyTo(RestFn.java:132)
    at clojure.core$apply.invokeStatic(core.clj:652)
    at clojure.core$apply.invoke(core.clj:641)
    at leiningen.core.classpath$resolve_managed_dependencies.invokeStatic(classpath.clj:509)
    at leiningen.core.classpath$resolve_managed_dependencies.doInvoke(classpath.clj:496)
    at clojure.lang.RestFn.invoke(RestFn.java:445)
    at leiningen.core.eval$prep.invokeStatic(eval.clj:85)
    at leiningen.core.eval$prep.invoke(eval.clj:73)
    at leiningen.core.eval$eval_in_project.invokeStatic(eval.clj:362)
    at leiningen.core.eval$eval_in_project.invoke(eval.clj:356)
    at leiningen.repl$server$fn__11838.invoke(repl.clj:243)
    at clojure.lang.AFn.applyToHelper(AFn.java:152)
    at clojure.lang.AFn.applyTo(AFn.java:144)
    at clojure.core$apply.invokeStatic(core.clj:646)
    at clojure.core$with_bindings_STAR_.invokeStatic(core.clj:1881)
    at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1881)
    at clojure.lang.RestFn.invoke(RestFn.java:425)
    at clojure.lang.AFn.applyToHelper(AFn.java:156)
    at clojure.lang.RestFn.applyTo(RestFn.java:132)
    at clojure.core$apply.invokeStatic(core.clj:650)
    at clojure.core$bound_fn_STAR_$fn__4671.doInvoke(core.clj:1911)
    at clojure.lang.RestFn.invoke(RestFn.java:397)
    at clojure.lang.AFn.run(AFn.java:22)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.sonatype.aether.resolution.DependencyResolutionException: Failed to collect dependencies for [#object[org.sonatype.aether.graph.Dependency 0x66021166 "org.clojure:clojure:jar:1.8.0 (compile)"] #object[org.sonatype.aether.graph.Dependency 0x781a8814 "org.symphonyoss.symphony:symphony-client:jar:1.0.0-SNAPSHOT (compile)"] #object[org.sonatype.aether.graph.Dependency 0x12fa609f "org.clojure:tools.nrepl:jar:0.2.12 (compile)"] #object[org.sonatype.aether.graph.Dependency 0x25ff650 "clojure-complete:clojure-complete:jar:0.2.4 (compile)"] #object[org.sonatype.aether.graph.Dependency 0x74204e5c "midje:midje:jar:1.8.3 (test)"] #object[org.sonatype.aether.graph.Dependency 0x58d632e4 "org.symphonyoss:clj-symphony:jar:RELEASE (compile)"] #object[org.sonatype.aether.graph.Dependency 0x19e94ff9 "venantius:ultra:jar:0.5.0 (compile)"]]
    at org.sonatype.aether.impl.internal.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:371)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93)
    at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:28)
    at cemerick.pomegranate.aether$resolve_dependencies_STAR_.invokeStatic(aether.clj:776)
    at cemerick.pomegranate.aether$resolve_dependencies_STAR_.doInvoke(aether.clj:677)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.core$apply.invokeStatic(core.clj:646)
    at clojure.core$apply.invoke(core.clj:641)
    at cemerick.pomegranate.aether$resolve_dependencies.invokeStatic(aether.clj:785)
    at cemerick.pomegranate.aether$resolve_dependencies.doInvoke(aether.clj:779)
    at clojure.lang.RestFn.invoke(RestFn.java:2793)
    at leiningen.core.classpath$fn__6722.invokeStatic(classpath.clj:260)
    ... 34 more
Caused by: org.sonatype.aether.collection.DependencyCollectionException: Failed to collect dependencies for [#object[org.sonatype.aether.graph.Dependency 0x66021166 "org.clojure:clojure:jar:1.8.0 (compile)"] #object[org.sonatype.aether.graph.Dependency 0x781a8814 "org.symphonyoss.symphony:symphony-client:jar:1.0.0-SNAPSHOT (compile)"] #object[org.sonatype.aether.graph.Dependency 0x12fa609f "org.clojure:tools.nrepl:jar:0.2.12 (compile)"] #object[org.sonatype.aether.graph.Dependency 0x25ff650 "clojure-complete:clojure-complete:jar:0.2.4 (compile)"] #object[org.sonatype.aether.graph.Dependency 0x74204e5c "midje:midje:jar:1.8.3 (test)"] #object[org.sonatype.aether.graph.Dependency 0x58d632e4 "org.symphonyoss:clj-symphony:jar:RELEASE (compile)"] #object[org.sonatype.aether.graph.Dependency 0x19e94ff9 "venantius:ultra:jar:0.5.0 (compile)"]]
    at org.sonatype.aether.impl.internal.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:258)
    at org.sonatype.aether.impl.internal.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:333)
    ... 49 more
Caused by: org.sonatype.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for org.symphonyoss:clj-symphony:jar:RELEASE
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:257)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:186)
    at org.sonatype.aether.impl.internal.DefaultDependencyCollector.process(DefaultDependencyCollector.java:412)
    at org.sonatype.aether.impl.internal.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:240)
    ... 50 more
Caused by: org.sonatype.aether.resolution.VersionResolutionException: Failed to resolve version for org.symphonyoss:clj-symphony:jar:RELEASE: Could not find metadata org.symphonyoss:clj-symphony/maven-metadata.xml in local (/Users/pmonks/.m2/repository)
    at org.apache.maven.repository.internal.DefaultVersionResolver.resolveVersion(DefaultVersionResolver.java:287)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:250)
    ... 53 more
Caused by: org.sonatype.aether.transfer.MetadataNotFoundException: Could not find metadata org.symphonyoss:clj-symphony/maven-metadata.xml in local (/Users/pmonks/.m2/repository)
    at org.sonatype.aether.impl.internal.DefaultMetadataResolver.resolve(DefaultMetadataResolver.java:215)
    at org.sonatype.aether.impl.internal.DefaultMetadataResolver.resolveMetadata(DefaultMetadataResolver.java:173)
    at org.apache.maven.repository.internal.DefaultVersionResolver.resolveVersion(DefaultVersionResolver.java:225)
    ... 54 more

The workaround is to force the use of a specific snapshot version:

$ lein try org.symphonyoss/clj-symphony 0.1.0-SNAPSHOT
avescodes commented 7 years ago

Hmm, I can't say for certain where the issue is coming from. I suspect it may have to do with some poor interaction between Leiningen, the libraries it uses for dependency management, and the local maven cache. I'll look a bit at the code to see if there are any places in the APIs we use to clear this up, but I can't make any promises. PRs welcome.