Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

User facing command line will fail if artifact references additional maven repos #78

Closed
lread opened this issue Jun 6, 2023 · 0 comments · Fixed by #79
Closed

User facing command line will fail if artifact references additional maven repos #78

lread opened this issue Jun 6, 2023 · 0 comments · Fixed by #79

Comments

@lread
Copy link
Member

lread commented Jun 6, 2023

Problem

If an artifact references additional maven repositories, the convenience cmd line syntax we created for users will fail.

Repro

miikka/clj-branca references the center maven repo.

❮ clojure -M -m cljdoc-analyzer.main analyze --project miikka/clj-branca --version 0.1.0 --output-filename foo.edn     
** ERROR: **
Exception: #error {
 :cause Could not find artifact com.goterl.lazycode:lazysodium-java:jar:4.3.0 in central (https://repo1.maven.org/maven2/)
 :data {:lib com.goterl.lazycode/lazysodium-java, :coord {:mvn/version 4.3.0, :deps/manifest :mvn, :dependents [miikka/clj-branca], :parents #{[miikka/clj-branca]}}}
 :via
 [{:type clojure.lang.ExceptionInfo
   :message Could not find artifact com.goterl.lazycode:lazysodium-java:jar:4.3.0 in central (https://repo1.maven.org/maven2/)
   :data {:lib com.goterl.lazycode/lazysodium-java, :coord {:mvn/version 4.3.0, :deps/manifest :mvn, :dependents [miikka/clj-branca], :parents #{[miikka/clj-branca]}}}
   :at [clojure.tools.deps.extensions.maven$get_artifact invokeStatic maven.clj 167]}]
 :trace
 [[clojure.tools.deps.extensions.maven$get_artifact invokeStatic maven.clj 167]
  [clojure.tools.deps.extensions.maven$get_artifact invoke maven.clj 155]
  [clojure.tools.deps.extensions.maven$eval3790$fn__3793 invoke maven.clj 178]
  [clojure.lang.MultiFn invoke MultiFn.java 244]
  [clojure.tools.deps$download_libs$fn__3368$fn__3369 invoke deps.clj 464]
  [clojure.tools.deps.util.concurrent$submit_task$task__2978 invoke concurrent.clj 35]
  [clojure.lang.AFn call AFn.java 18]
  [java.util.concurrent.FutureTask run FutureTask.java 264]
  [java.util.concurrent.ThreadPoolExecutor runWorker ThreadPoolExecutor.java 1136]
  [java.util.concurrent.ThreadPoolExecutor$Worker run ThreadPoolExecutor.java 635]
  [java.lang.Thread run Thread.java 833]]}

Work-around

Specify the extra-repro:

❯ clojure -M -m cljdoc-analyzer.main analyze --project miikka/clj-branca --version 0.1.0 --output-filename foo.edn \      
>   --extra-repo "jcenter https://jcenter.bintray.com"
2023-06-06 18:27:50,746 INFO  cljdoc-analyzer.runner - cljdoc-analyzer-version 1.0.731
2023-06-06 18:27:50,784 INFO  cljdoc-analyzer.runner - args:
{:exclude-with [:no-doc :skip-wiki :mranderson/inlined],
 :project "miikka/clj-branca",
 :version "0.1.0",
 :output-filename "foo.edn",
 :jarpath
 "/home/lee/.m2/repository/miikka/clj-branca/0.1.0/clj-branca-0.1.0.jar",
 :pompath
 "/home/lee/.m2/repository/miikka/clj-branca/0.1.0/clj-branca-0.1.0.pom",
 :extra-repos {"jcenter" {:url "https://jcenter.bintray.com"}},
 :languages nil}

2023-06-06 18:27:50,868 INFO  cljdoc-analyzer.runner - dependencies for analysis:
org.clojure/clojure 1.10.1
  org.clojure/core.specs.alpha 0.2.44
  org.clojure/spec.alpha 0.2.176
org.clojure/clojurescript 1.11.60
  com.cognitect/transit-java 1.0.362
    com.fasterxml.jackson.core/jackson-core 2.8.7
    org.msgpack/msgpack 0.6.12
      com.googlecode.json-simple/json-simple 1.1.1
      org.javassist/javassist 3.18.1-GA
    javax.xml.bind/jaxb-api 2.3.0
  org.clojure/google-closure-library 0.0-20211011-0726fdeb
    org.clojure/google-closure-library-third-party 0.0-20211011-0726fdeb
  org.clojure/tools.reader 1.3.6
  com.google.javascript/closure-compiler-unshaded v20220502
cljdoc-analyzer/metagetta /home/lee/proj/oss/cljdoc/cljdoc-analyzer/modules/metagetta
  org.clojure/tools.namespace 1.4.0
    org.clojure/java.classpath 1.0.0
javax.servlet/javax.servlet-api 4.0.1
miikka/clj-branca /tmp/cljdoc-miikka-clj-branca-0.1.0442218218102351566
  miikka/clj-base62 0.1.0
  byte-streams/byte-streams 0.2.4
    manifold/manifold 0.1.8
      org.clojure/tools.logging 0.3.1
      io.aleph/dirigiste 0.1.5
      riddley/riddley 0.1.14
    primitive-math/primitive-math 0.1.6
    clj-tuple/clj-tuple 0.2.2
  com.goterl.lazycode/lazysodium-java 4.3.0
    co.libly/resource-loader 1.3.7
    net.java.dev.jna/jna 5.5.0
    org.slf4j/slf4j-api 2.0.0-alpha1

2023-06-06 18:27:50,869 INFO  cljdoc-analyzer.runner - launching metagetta for: miikka/clj-branca languages: :auto-detect
2023-06-06 18:27:54,595 INFO  cljdoc-analyzer.runner - metagetta results:
exit-code 0
stdout:
 Args: {:namespaces :all,
        :root-path
        "/tmp/cljdoc-miikka-clj-branca-0.1.0442218218102351566/src/main/clojure",
        :languages :auto-detect,
        :output-filename "/tmp/miikka-clj-branca6578671240962030381.edn",
        :exclude-with [:no-doc :skip-wiki :mranderson/inlined]}
 Java version 17.0.7
 Clojure version 1.10.1
 ClojureScript version 1.11.60
 Analyzing for clj
 ⏱  Analysis for clj took: 1.3s
 Done
2023-06-06 18:27:54,604 INFO  cljdoc-analyzer.runner - results file: /home/lee/proj/oss/cljdoc/cljdoc-analyzer/foo.edn
2023-06-06 18:27:54,604 INFO  cljdoc-analyzer.runner - Analysis succeeded.

Should we bother fixing?

Probably. It is confusing. And...

The clojure tools invocation of cljdoc-analyzer is using the same technique to resolve the project dep and will fail in the same way.

This is more important because this invocation is used by (the now somewhat neglected) (https://github.com/cljdoc/cljdoc-check-action)[cljdoc-check-action].

Ideas

We'd like to resolve our jar and pom without resolving its deps.
Perhaps I can twist org.clojure/tools.deps's arm to do that?

lread added a commit that referenced this issue Jun 7, 2023
For the user facing command lines, we now download the artifact and pom
only and make no attempt to resolve its dependencies. Attempting to
resolve dependencies would fail for artifacts that reference extra
non-default maven repositories.

Full dependency resolution occurs later during analysis and will
automatically include any extra maven repositories specified by the
analyzed artifact.

Switch integration user cmd line integration test to use miikka
clj-branca to exercise our fix. It specifies and relies on jcenter
maven repo.

We continue to use clojure/tools.deps internals.
But that slope was already slipped down.

Closes #78
@lread lread closed this as completed in #79 Jun 7, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant