<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Clojure Q&amp;A - Recent questions in Tools</title>
<link>https://ask.clojure.org/index.php/questions/tools</link>
<description></description>
<item>
<title>does deps.edd support &quot;exclusion&quot; with wild cards ?</title>
<link>https://ask.clojure.org/index.php/14922/does-deps-edd-support-exclusion-with-wild-cards</link>
<description>&lt;p&gt;maven supports this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;org.apache.hadoop&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;hadoop-common&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;${hadoop.version}&amp;lt;/version&amp;gt;
      &amp;lt;exclusions&amp;gt;
        &amp;lt;exclusion&amp;gt;
          &amp;lt;groupId&amp;gt;*&amp;lt;/groupId&amp;gt;
          &amp;lt;artifactId&amp;gt;*&amp;lt;/artifactId&amp;gt;
        &amp;lt;/exclusion&amp;gt;
      &amp;lt;/exclusions&amp;gt;   
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;while Clojure does not , it seems&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14922/does-deps-edd-support-exclusion-with-wild-cards</guid>
<pubDate>Sat, 07 Feb 2026 21:12:28 +0000</pubDate>
</item>
<item>
<title>Improving curl options for CLI install scripts (brew-install)</title>
<link>https://ask.clojure.org/index.php/14900/improving-curl-options-for-cli-install-scripts-brew-install</link>
<description>&lt;p&gt;Hi!&lt;/p&gt;
&lt;p&gt;I'm the maintainer for Heroku's Clojure buildpack. It uses the install scripts from clojure/brew-install to install the CLI. I noticed intermittent install failures related to the download of the Clojure tools. I believe most of them could be avoided with a slightly changed curl command line options.&lt;/p&gt;
&lt;p&gt;I opened a PR before realizing that PRs will not be accepted, so I'm starting this thread to properly get the discussion going. For reference, the closed PR can be found here: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clojure/brew-install/pull/10&quot;&gt;https://github.com/clojure/brew-install/pull/10&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I believe these options would improve the download behaviour for all users, but especially when used in automations:&lt;/p&gt;
&lt;p&gt;--connect-timeout 3 (&lt;a rel=&quot;nofollow&quot; href=&quot;https://curl.se/docs/manpage.html#--connect-timeout&quot;&gt;https://curl.se/docs/manpage.html#--connect-timeout&lt;/a&gt;)&lt;br&gt;
Prevents hanging when server is unreachable.&lt;/p&gt;
&lt;p&gt;--fail (&lt;a rel=&quot;nofollow&quot; href=&quot;https://curl.se/docs/manpage.html#-f&quot;&gt;https://curl.se/docs/manpage.html#-f&lt;/a&gt;)&lt;br&gt;
Exit with error code 22 for HTTP responses with status codes &amp;gt;= 400.&lt;/p&gt;
&lt;p&gt;--max-time 60 (&lt;a rel=&quot;nofollow&quot; href=&quot;https://curl.se/docs/manpage.html#-m&quot;&gt;https://curl.se/docs/manpage.html#-m&lt;/a&gt;)&lt;br&gt;
Maximum time in seconds for the entire transfer operation. Prevents hanging indefinitely with slow connections.&lt;/p&gt;
&lt;p&gt;--no-progress-meter (&lt;a rel=&quot;nofollow&quot; href=&quot;https://curl.se/docs/manpage.html#--no-progress-meter&quot;&gt;https://curl.se/docs/manpage.html#--no-progress-meter&lt;/a&gt;)&lt;br&gt;
Introduced in curl 7.67.0 (Nov 2019). Disables the progress bar for cleaner output. But less drastic than --silent and will still output diagnostic information (i.e. retries).&lt;/p&gt;
&lt;p&gt;--retry-max-time 60 (&lt;a rel=&quot;nofollow&quot; href=&quot;https://curl.se/docs/manpage.html#--retry-max-time&quot;&gt;https://curl.se/docs/manpage.html#--retry-max-time&lt;/a&gt;)&lt;br&gt;
Retry only within this time period (60 seconds). After this time expires, no more retries will be attempted.&lt;/p&gt;
&lt;p&gt;--retry 5 (&lt;a rel=&quot;nofollow&quot; href=&quot;https://curl.se/docs/manpage.html#--retry&quot;&gt;https://curl.se/docs/manpage.html#--retry&lt;/a&gt;)&lt;br&gt;
Introduced in curl 7.12.3 (Dec 2004). Retry up to 5 times on transient errors (timeouts, HTTP 408, 429, 500, 502, 503, 504, 522, 524).&lt;/p&gt;
&lt;p&gt;--retry-connrefused (&lt;a rel=&quot;nofollow&quot; href=&quot;https://curl.se/docs/manpage.html#--retry-connrefused&quot;&gt;https://curl.se/docs/manpage.html#--retry-connrefused&lt;/a&gt;)&lt;br&gt;
Introduced in curl 7.52.0 (Dec 2016). Consider connection refused as a transient error for --retry.&lt;/p&gt;
&lt;p&gt;These are obviously opinionated and my ask is not for these options specifically. Happy to get anything that will improve the situation. :)&lt;/p&gt;
&lt;p&gt;Manuel&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14900/improving-curl-options-for-cli-install-scripts-brew-install</guid>
<pubDate>Mon, 26 Jan 2026 12:39:44 +0000</pubDate>
</item>
<item>
<title>Prepping -  cache invalidation</title>
<link>https://ask.clojure.org/index.php/14711/prepping-cache-invalidation</link>
<description>&lt;p&gt;Following the existing example:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.org/reference/clojure_cli#deps_prep&quot;&gt;https://clojure.org/reference/clojure_cli#deps_prep&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{:paths [&quot;src&quot; &quot;target/classes&quot;]
 :deps/prep-lib
 {:ensure &quot;target/classes&quot;
  :alias :build
  :fn compile-java}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;How does one control cache invalidation? i.e. if any .java file has been added or modified, a compilation should be re-triggered.&lt;/p&gt;
&lt;p&gt;The linked doc says:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;:ensure - directory existence determines whether prep is needed&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It seems to me that &lt;em&gt;only&lt;/em&gt; the existence of a directory may not be sufficient to determine if a lib is 'prepped?' One might want to add a custom function, for instance.&lt;/p&gt;
&lt;p&gt;This use case is particularly painful in monorepos, where a given sub-project may depend on a sibling project's java classes.&lt;/p&gt;
&lt;p&gt;There's the option of wrapping things with babashka, which worked well for me, however it is surprising that standalone tools.deps appeared to be insufficient for this use case.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14711/prepping-cache-invalidation</guid>
<pubDate>Tue, 16 Sep 2025 10:31:56 +0000</pubDate>
</item>
<item>
<title>how do you set  -Djdk.attach.allowAttachSelf enabled so that I can interrupt a cider repl in emacs</title>
<link>https://ask.clojure.org/index.php/14697/attach-allowattachself-enabled-interrupt-cider-repl-emacs</link>
<description>&lt;p&gt;In a long running process I want to interrupt the repl.&lt;br&gt;
if you set deps.edn with the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:aliases {:dev {:jvm-opts [&quot;-Djdk.attach.allowAttachSelf enabled&quot;
                            &quot;-XX:+PreserveFramePointer&quot;
                            &quot;-XX:+UnlockDiagnosticVMOptions&quot;
                            &quot;-XX:+DebugNonSafepoints&quot;]}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and then in init.el:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(setq cider-clojure-cli-global-options &quot;-Adev&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;you can avoid the following error:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ERROR: Cannot stop thread on JDK21+ without -Djdk.attach.allowAttachSelf 
enabled, see https://nrepl.org/nrepl/installation.html#jvmti.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;but the java process still continues&lt;/p&gt;
</description>
<category>CIDER</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14697/attach-allowattachself-enabled-interrupt-cider-repl-emacs</guid>
<pubDate>Tue, 02 Sep 2025 15:56:27 +0000</pubDate>
</item>
<item>
<title>tools.deps.cli.api/mvn-install docstring typo</title>
<link>https://ask.clojure.org/index.php/14669/tools-deps-cli-api-mvn-install-docstring-typo</link>
<description>&lt;pre&gt;&lt;code&gt;&amp;gt; clojure -X:deps help/doc :fn mvn-install
-------------------------
clojure.tools.deps.cli.api/mvn-install
([{:keys [jar pom lib version classifier local-repo]}])
  Install a jar and pom to the Maven local cache.
  The pom file must either be supplied, or generated based
  on provided lib/version/classifier, or provided inside the jar.
  The group/artifact/version coordinate will be pulled from the
  pom source as above.

  Required:
    :jar (reqired) - path to jar file (embedded pom used by default)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Should be &lt;code&gt;:jar (required)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In addition, further on in the docstring:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  Execute ad-hoc:
    clj -X:deps mvn/install :jar '&quot;foo-1.2.3.jar&quot;'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That should be &lt;code&gt;mvn-install&lt;/code&gt;, not &lt;code&gt;mvn/install&lt;/code&gt;.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14669/tools-deps-cli-api-mvn-install-docstring-typo</guid>
<pubDate>Sat, 09 Aug 2025 15:57:48 +0000</pubDate>
</item>
<item>
<title>clojure -X:deps find-versions doesn't sort tags correctly?</title>
<link>https://ask.clojure.org/index.php/14668/clojure-x-deps-find-versions-doesnt-sort-tags-correctly</link>
<description>&lt;p&gt;When Maven versions include pre-releases, &lt;code&gt;find-versions&lt;/code&gt; seems to sort correctly:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; clojure -X:deps find-versions :lib hiccup/hiccup
Downloading: hiccup/hiccup/maven-metadata.xml from clojars
{:mvn/version &quot;2.0.0-alpha1&quot;}
{:mvn/version &quot;2.0.0-alpha2&quot;}
{:mvn/version &quot;2.0.0-RC1&quot;}
{:mvn/version &quot;2.0.0-RC2&quot;}
{:mvn/version &quot;2.0.0-RC3&quot;}
{:mvn/version &quot;2.0.0-RC4&quot;}
{:mvn/version &quot;2.0.0-RC5&quot;}
{:mvn/version &quot;2.0.0&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;However, when a library is git-only with tags and pre-releases exist, they seem to be alpha-sorted instead:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; clojure -X:deps find-versions :lib io.github.seancorfield/deps-new
{:git/tag &quot;v0.7.1-rc&quot;, :git/sha &quot;5a6168d&quot;}
{:git/tag &quot;v0.8.0&quot;, :git/sha &quot;2f96530&quot;}
{:git/tag &quot;v0.8.1&quot;, :git/sha &quot;2859baf&quot;}
{:git/tag &quot;v0.9.0&quot;, :git/sha &quot;da2f764&quot;}
{:git/tag &quot;v0.9.0-rc&quot;, :git/sha &quot;b32e0f2&quot;}
{:git/tag &quot;v0.10.0&quot;, :git/sha &quot;20e82f8&quot;}
{:git/tag &quot;v0.10.1&quot;, :git/sha &quot;a90029c&quot;}
{:git/tag &quot;v0.10.1-rc&quot;, :git/sha &quot;35159b5&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Those &lt;code&gt;-rc&lt;/code&gt; versions should sort &lt;em&gt;before&lt;/em&gt; the full release.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14668/clojure-x-deps-find-versions-doesnt-sort-tags-correctly</guid>
<pubDate>Sat, 09 Aug 2025 14:04:34 +0000</pubDate>
</item>
<item>
<title>POSIX-style command line arguments in tools (-T)</title>
<link>https://ask.clojure.org/index.php/14608/posix-style-command-line-arguments-in-tools-t</link>
<description>&lt;p&gt;I have a couple command line tools written as libraries that I'd like to expose as proper Clojure Tools. They have classic &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html&quot;&gt;POSIX-style command line interfaces&lt;/a&gt;, relying on &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clojure/tools.cli&quot;&gt;tools.cli&lt;/a&gt;. I could add an &lt;code&gt;-X&lt;/code&gt; kv-map interface, but there are a number of boolean flags that would not translate well to &lt;code&gt;:foo true&lt;/code&gt; style (such as arbitrary file paths).&lt;/p&gt;
&lt;p&gt;Is there a way to pass arbitrary arguments to a clojure Tool without using the kv-map style?&lt;/p&gt;
&lt;p&gt;And if not, would there be interest in a flag or option that would allow for such a thing?&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14608/posix-style-command-line-arguments-in-tools-t</guid>
<pubDate>Thu, 03 Jul 2025 21:06:46 +0000</pubDate>
</item>
<item>
<title>Improve clojure cli error msg: &quot;The following libs must be prepared&quot; could include &quot;clojure  -X:deps prep&quot;</title>
<link>https://ask.clojure.org/index.php/14581/improve-clojure-error-following-prepared-include-clojure</link>
<description>&lt;p&gt;This happens basically every time I add a dependency that needs prepping. I see the error, but don't have the prep command memorized so I have to look it up. It would be very helpful if the error printed also included the command invocation for prepping, &lt;code&gt;clojure  -X:deps prep&lt;/code&gt;.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14581/improve-clojure-error-following-prepared-include-clojure</guid>
<pubDate>Sun, 08 Jun 2025 17:57:20 +0000</pubDate>
</item>
<item>
<title>How to uberjar without bundling source code?</title>
<link>https://ask.clojure.org/index.php/14486/how-to-uberjar-without-bundling-source-code</link>
<description>&lt;p&gt;The example given in &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.org/guides/tools_build#_compiled_uberjar_application_build&quot;&gt;https://clojure.org/guides/tools_build#_compiled_uberjar_application_build&lt;/a&gt; also copies all source files from the src folder into the uberjar. As I understand it, this is not strictly required for a compiled application? In my scenario where I don't want to distribute my source code along with the uberjar, can I simply not copy or exclude clojure source code? Or does that have subtle side effects? Why would I want source code in my uberjar to begin with?&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14486/how-to-uberjar-without-bundling-source-code</guid>
<pubDate>Sat, 29 Mar 2025 19:58:38 +0000</pubDate>
</item>
<item>
<title>a) how: programmatically set REPL ‘context’ ‘prj-1 aware’? b) how: programmatically switch REPL ‘context’ ‘prj-n aware’?</title>
<link>https://ask.clojure.org/index.php/14422/programmatically-context-programmatically-switch-context</link>
<description>&lt;p&gt;Ok, regardless of editor, running &lt;em&gt;clj&lt;/em&gt; in a directory will start a repl that has &quot;project context&quot; to project deps.edn in &lt;em&gt;that&lt;/em&gt; directory, and that is the way that &lt;em&gt;most&lt;/em&gt; Clojure developers create a &lt;em&gt;connected&lt;/em&gt; repl.&lt;/p&gt;
&lt;p&gt;The implication seems to be to work on a &lt;em&gt;different&lt;/em&gt; project one must (System/exit 0) VM and start another VM using &lt;em&gt;clj&lt;/em&gt; command to ‘create a connected repl’ to project deps.edn in a different directory? This appears to be idiomatically (colloquially) referred to as ‘restarting the REPL’ I believe?&lt;/p&gt;
&lt;p&gt;Seems rather draconian for a dev env, let alone a lisp dev env? I thought the highly dynamic heritage of lisp replete with multiple REPLs was universally sought after? &lt;strong&gt;10 years later&lt;/strong&gt; and no multiple REPLs for clojure? Personally, I’m somewhat surprised, but maybe nobody really wants, needs or requires multiple clojure REPLs? I think multiple REPLs could be transformational in many use cases IMHO, or maybe I’m really ‘out of the loop’ no pun intended?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;03-10-2015&lt;/strong&gt; Clojure stream socket repl discussion (&lt;a rel=&quot;nofollow&quot; href=&quot;https://groups.google.com/g/clojure-dev/c/Dl3Stw5iRVA/m/mgwvmEnjnBoJ&quot;&gt;https://groups.google.com/g/clojure-dev/c/Dl3Stw5iRVA/m/mgwvmEnjnBoJ&lt;/a&gt;) several notable sub-quotes:&lt;/p&gt;
&lt;p&gt;“I think it is important, with tooling, to have the broadest, open notion of the types of 'use cases' for Clojure, and for workflows of people using Clojure, lest you actually limit them. I hope people are able to write their languages and DSLs, test embedded control/debug consoles, design next-generation REPLs and debuggers, grab data dumps etc, all from their REPL. That's the heritage of Lisp. Many people are doing data science, languages, genetics, rule-systems etc type things with Clojure, not just web apps&lt;/p&gt;
&lt;p&gt;But it is quite common in rich Common Lisp IDEs like Lispworks for people to have multiple listener (REPL) sessions open at the same time (against the same runtime). You can launch long running processes that produce streaming output, switch to another listener and continue interaction and development, have separate listeners for separate contexts/state/command-history etc. There's a lot to Lisp development that's not RPC.&lt;/p&gt;
&lt;p&gt;Note multiple listeners, data inspectors and more. Maybe not the latest GUIs, but the capabilities should be a source of inspiration for any Clojure IDE.”&lt;/p&gt;
&lt;p&gt;Previously hinted personal end goal: exploit ‘critical mass’ for a (truly) ‘dynamic’ clojure dev env, including dynamic java recompilation, namespace reloading, etc. and include at a minimum:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;clojure.repl.deps&lt;/li&gt;
&lt;li&gt;clojure.tools.build.api (clojure.tools.build)&lt;/li&gt;
&lt;li&gt;clojure.tools.deps&lt;/li&gt;
&lt;li&gt;clojure.tools.deps.cli.api (clojure.deps.cli)&lt;/li&gt;
&lt;li&gt;clojure.tools.namespace&lt;/li&gt;
&lt;li&gt;clojure.tools.tools.api (clojure.tools.tools)&lt;/li&gt;
&lt;li&gt;GitHub - clj-commons/virgil: Recompile Java code without restarting&lt;br&gt;
the REPL (&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clj-commons/virgil&quot;&gt;https://github.com/clj-commons/virgil&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;other polyglot ‘evaluation/compilation’ TBD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also included a few tools to help come back up to speed quicker:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GitHub - nubank/morse: A graphical, interactive tool for browsing&lt;br&gt;
Clojure data (&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/nubank/morse&quot;&gt;https://github.com/nubank/morse&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[clj-ns-browser/clj-ns-browser &quot;2.0.0-SNAPSHOT&quot;] – Clojars&lt;br&gt;
(&lt;a rel=&quot;nofollow&quot; href=&quot;https://clojars.org/clj-ns-browser/versions/2.0.0-SNAPSHOT&quot;&gt;https://clojars.org/clj-ns-browser/versions/2.0.0-SNAPSHOT&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Eventually will look at many ‘current projects’ including: GitHub - HumbleUI/HumbleUI: Clojure Desktop UI framework (&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/HumbleUI/HumbleUI&quot;&gt;https://github.com/HumbleUI/HumbleUI&lt;/a&gt;) as stated to build better apps than possible with web, AND access full power of your computer (multithreaded), wouldn’t that be convenient?&lt;/p&gt;
&lt;p&gt;Another quote from &lt;strong&gt;03-10-2015&lt;/strong&gt; Clojure stream socket repl discussion (&lt;a rel=&quot;nofollow&quot; href=&quot;https://groups.google.com/g/clojure-dev/c/Dl3Stw5iRVA/m/IHoVWiJz5UIJ&quot;&gt;https://groups.google.com/g/clojure-dev/c/Dl3Stw5iRVA/m/IHoVWiJz5UIJ&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;“REPL stands for something - Read, Eval, Print, Loop. It does not stand for - Eval RPC Server/Window.”&lt;/p&gt;
&lt;p&gt;Anyway, that would be ERSW, seriously, I couldn’t agree more, a required lisp feature, for me anyway: multiple simultaneous-concurrent (multi-threaded) REPLs, I refer to as ‘Clojure Listeners’ (‘in-process’ or ‘against the same runtime’) non-socket non-nREPL non-LSP non-network non-middleware non-multi-VM based REPL approaches that support multiple simultaneous dev management ‘native VM’ approaches for polyglot projects ala GraalVM.&lt;/p&gt;
&lt;p&gt;[SEE Multiple Clojure Listeners] (&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/mgrisius/clj-mode/blob/0.9/Clojure_Listener_2025-02-23_09-02-41.jpg&quot;&gt;https://github.com/mgrisius/clj-mode/blob/0.9/Clojure_Listener_2025-02-23_09-02-41.jpg&lt;/a&gt;) &lt;/p&gt;
&lt;p&gt;Note JavaScript Listener “JS-1” pictured. Could have python, R, ruby, or whatever language(s) available in GraalVM. ‘Clojure Listeners’ used with or without emacs, ‘regardless of editor’, in any Java VM for that matter. Could easily have multi-threaded socket-based listeners . . .&lt;/p&gt;
&lt;p&gt;Clojure Listeners: multi-threaded, full history, type ahead, line editing, completion, pop-up menus, colorized output, colorized-balanced-brackets-([{, etc. Also working on other listener features: multi-line editing, enhanced source lookup, doc lookup, repo-artifact search, embeddable .e.g. in morse, etc. all leveraging the ‘purest clojure value chain possible’!&lt;/p&gt;
&lt;p&gt;As previously mentioned, my basic ‘old style’ simple.bat with (~60mb) über jar simple compatibility with emacs lisp-inferior-mode works good with ‘legacy’ approach and new ‘CLI deps.edn approach’ basic use so far, both with ~1 second startup time. Zero optimization has been done thus far, e.g. GraalVM native image, etc.&lt;/p&gt;
&lt;p&gt;My forward-looking goal &amp;amp; reason for asking initial question: compatibility with future clojure tool direction(s), NOT invent the next ‘technical debt’ ad hoc one-off hack. My Holy Graal: I want a fully dynamic long running VM under full clojure programmatic control.&lt;/p&gt;
&lt;p&gt;So, the question remains: &lt;strong&gt;a) how to programmatically set REPL with ‘context’ for ‘project-1 aware’? b) how to programmatically switch REPL ‘context’ to ‘project-n aware’?&lt;/strong&gt;&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14422/programmatically-context-programmatically-switch-context</guid>
<pubDate>Sun, 23 Feb 2025 16:56:50 +0000</pubDate>
</item>
<item>
<title>deps.edn support for :git/branch + :git/sha</title>
<link>https://ask.clojure.org/index.php/14400/deps-edn-support-for-git-branch-git-sha</link>
<description>&lt;p&gt;Are there plans to add a &lt;code&gt;:git/branch&lt;/code&gt; key for Git libs in &lt;code&gt;deps.edn&lt;/code&gt; that works like &lt;code&gt;:git/tag&lt;/code&gt;? In other words, Git refs (&lt;code&gt;:git/branch&lt;/code&gt; or &lt;code&gt;:git/tag&lt;/code&gt;) have to be paired with a Git SHA (&lt;code&gt;:git/sha&lt;/code&gt;) to lock to a specific commit as Git refs can be updated to point to different commits.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{:deps {owner/repo {:git/url &quot;https://github.com/owner/repo.git&quot;
                    :git/branch &quot;1.x&quot;
                    :git/sha &quot;2fd4e1c67a2d28fced849ee1bb76e7391b93eb12&quot;}}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The purpose is to support projects using major version branch workflows as compared to tag + release workflows.&lt;/p&gt;
&lt;p&gt;Major version branch workflows may be used for things like private polyrepo projects (e.g. a web service where the API specs/model, backend, and infrastructure-as-code templates are split) that don't need the additional overhead that comes with using tags + releases.&lt;/p&gt;
&lt;p&gt;Auto-update tools like Renovate or Dependabot can use the Git ref key in a &lt;code&gt;deps.edn&lt;/code&gt; Git lib to update its locked &lt;code&gt;:git/sha&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For tag + release workflows, this may be some heuristic like semantic versioning.&lt;/p&gt;
&lt;p&gt;For major version branch workflows, the auto-update tool needs to use something like &lt;code&gt;:git/branch&lt;/code&gt; to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Tie break between a given Git SHA's descendants if there's multiple.&lt;/li&gt;
&lt;li&gt;Ignore PR branches on the tip of a given branch (e.g. ignore a PR branch that's a descendant of the tip of the &lt;code&gt;main&lt;/code&gt; branch).&lt;/li&gt;
&lt;/ol&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14400/deps-edn-support-for-git-branch-git-sha</guid>
<pubDate>Thu, 20 Feb 2025 06:04:47 +0000</pubDate>
</item>
<item>
<title>a) how to start REPL with ‘context’ for ‘project-1 aware’? b) How to switch REPL ‘context’ to ‘project-n aware’?</title>
<link>https://ask.clojure.org/index.php/14392/start-with-context-project-aware-switch-context-project-aware</link>
<description>&lt;p&gt;Been away from clojure for a while, taking a fresh look at CLI &amp;amp; deps tool chain current status, direction &amp;amp; potential work flow(s). Previously maintained linux, macOS &amp;amp; MS Win / WSL2 dev envs, only looking at MS Win clojure right now.&lt;/p&gt;
&lt;p&gt;Dev env includes GraalVM JDK 23, clojure 1.12.0, emacs 27.1 with minimal (ancient) lisp-inferior-mode clj-mode (&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/mgrisius/clj-mode&quot;&gt;https://github.com/mgrisius/clj-mode&lt;/a&gt;), and Apache ant/ivy 1.10.3 for Transitive Dependency Management (TDM), classpath &amp;amp; java command construction. My ‘legacy’ emacs, clojure &amp;amp; java code are operational again.&lt;/p&gt;
&lt;p&gt;Using basic ‘old style’ simple.bat with (~60mb) über jar simple compatibility with emacs lisp-inferior-mode with ~1 second startup time, e.g. m-x eval-expression (run-lisp “simple.bat”):&lt;br&gt;
java -cp E:\dev\projects\simple\target\0.0.1.standalone.jar clojure.main&lt;/p&gt;
&lt;p&gt;Current goals include: convert to CLI &amp;amp; deps tools, among others.&lt;/p&gt;
&lt;p&gt;Installed clj-msi (Clojure 1.12.0.1501) Clojure for Windows 25.5.3460.1501, create basic project, deps.edn etc. Can use CLI from cmd.exe or powershell.exe to execute basic actions: invoke REPL, check versions, download deps, create über jar etc. Command line stuff works good!&lt;/p&gt;
&lt;p&gt;Not sure how best to leverage CLI &amp;amp; deps from a basic .bat file so that the resulting REPL is ‘project aware’, e.g. sees project deps.edn, build.clj, user.clj plus ‘tools.build’ related capabilities? So far, subtle differences between CLI interactive and basic .bat cmd.exe or powershell.exe results.&lt;/p&gt;
&lt;p&gt;As the tools.build Guide states: “We want to write this program with our favorite programming language, Clojure, and tools.build is a library of functions commonly needed for builds that can be connected together in flexible ways. Writing a build program does take a bit more code than other declarative approaches, but can be easily extended or customized far into the future, creating a build that grows with your project.”&lt;/p&gt;
&lt;p&gt;I prefer writing clojure code over complex cross platform compatible (shell) scripts, workarounds or hacks. So, I think I want full CLI functionality to use from the REPL to avoid incidental complexity, e.g. ‘very complicated’ problems discussed in Clojure CLI Reference in ‘Quoting keys and values’ related to platform specific issues wrt cmd.exe or powershell.exe concerns. Overall goal: avoid ‘technical debt’ from ANY platform specific minutiae for ANY shell, e.g. bash/tcsh, cmd.exe, powershell.exe, or even any new emacs lisp to focus solely on investment in purest clojure value chain possible.&lt;/p&gt;
&lt;p&gt;BTW: happily seems like there’s ‘critical mass’ for a (fairly complete) ‘dynamic’ clojure dev env with tools akin to early lisp machine (lispm) (e.g. Symbolics) ‘procedural’ style defsystem.&lt;/p&gt;
&lt;p&gt;Re-read clojure doc a few times, no mention on how a REPL is or s/b connected (‘in-process’) in a single VM with access to a ‘project’ with ‘tools.build’ and related features enabled? Or how to switch ‘build context’ to another ‘project’. Looked at monorepo / Polylith type subprojects that use ‘with-project-root’. Might be a good fit for a ‘mega project’ but doesn’t seem like a good fit (at least to me) for disparate, scattered or loosely coupled projects. Could keep a list of target project dirs and ‘map’ specific build tool process using ‘with-project-root’?&lt;/p&gt;
&lt;p&gt;Also mentioned in tools.build Guide: ‘Parametrized builds’ that s/b easy to use from CLI and via programmatic use to generate :dev :test :debug :deploy :install :prod :maintenance or :whatever actions or artifacts are required in conjunction with a ‘clj -T:build action-name’ approach.  Seems very reasonable, if there was a repeatable initial setup or process to make project deps.edn etc. &amp;amp; tools.build aware at a REPL.&lt;/p&gt;
&lt;p&gt;To summarize, it would be nice to have a minimal .bat file and/or ‘user.clj’ to enable the CLI deps experience/capabilities/tools programmatically via REPL. Am I over thinking or missing anything here? Perhaps by design or maybe it’s too early to ask for normative, idiomatic or canonical recommendations?&lt;/p&gt;
&lt;p&gt;My initial question is a) how to start a REPL with ‘context’ that is ‘project-1 aware’? b) How to switch a REPL ‘context’ to be ‘project-n aware’?&lt;/p&gt;
&lt;p&gt;I apologize I’m just starting out with CLI, deps.edn, tools.build, user.clj, etc. and have not absorbed many of the intricacies re required libraries, operational details, setup and intended use cases. Any suggestions would be greatly appreciated, thanks for sharing any insights!&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14392/start-with-context-project-aware-switch-context-project-aware</guid>
<pubDate>Mon, 17 Feb 2025 17:14:46 +0000</pubDate>
</item>
<item>
<title>Confusing error message on deps.edn wrong git/url dependency</title>
<link>https://ask.clojure.org/index.php/14283/confusing-error-message-on-deps-edn-wrong-git-url-dependency</link>
<description>&lt;p&gt;When you misspell the &lt;code&gt;:git/url&lt;/code&gt; of a git dependency (or the dep name used to infer a url) the error says :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Cloning: https://github.com/MISSPELLED-ORG-OR-REPO-PATH
Error building classpath. Unable to clone /home/user/.gitlibs/_repos/https/github.com/MISSPELLED-ORG-OR-REPO-PATH
fatal: could not read Username for 'https://github.com': terminal prompts disabled
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I find the the 3 sentences confusing since they mention classpath, a local folder, username, and terminal prompts disabled. &lt;/p&gt;
&lt;p&gt;It would be great if it more clearly can express that no repo could be found with the provided URL, or at least remove the last sentence &lt;code&gt;fatal: could not read Username for 'https://github.com': terminal prompts disabled&lt;/code&gt; which I find misleading.&lt;/p&gt;
&lt;p&gt;Maybe the &lt;code&gt;Unable to clone&lt;/code&gt; could be followed by the url instead of the local folder also?&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14283/confusing-error-message-on-deps-edn-wrong-git-url-dependency</guid>
<pubDate>Thu, 05 Dec 2024 10:17:00 +0000</pubDate>
</item>
<item>
<title>why does clj -X pass in options as a clojure.lang.Symbol?</title>
<link>https://ask.clojure.org/index.php/14270/why-does-clj-x-pass-in-options-as-a-clojure-lang-symbol</link>
<description>&lt;p&gt;something i found counterintuitive recently is that &lt;code&gt;clj -X&lt;/code&gt; passes in options as a symbols.  so for example i have this function:&lt;br&gt;
&lt;code&gt;(defn test2 [opts]
  (println (type (:file opts))))&lt;/code&gt;&lt;br&gt;
when i run clj like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-&amp;gt; clj -X some.package/test2 :file some-dir/file1

clojure.lang.Symbol
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;i would think it would be a string, so i'm curious why it's a symbol.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14270/why-does-clj-x-pass-in-options-as-a-clojure-lang-symbol</guid>
<pubDate>Mon, 25 Nov 2024 20:50:14 +0000</pubDate>
</item>
<item>
<title>Is there a plan to have completion for &quot;clojure&quot; command?</title>
<link>https://ask.clojure.org/index.php/14233/is-there-a-plan-to-have-completion-for-clojure-command</link>
<description>&lt;p&gt;It would be nice if I didn't have to remember all the tools I have installed and their options. They could be auto completed on command line.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I would like to have available tools listed when typing: &lt;code&gt;clojure -T&amp;lt;tab&amp;gt;&amp;lt;tab&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;I would like to have specific tool functions listed when typing: &lt;code&gt;clojure -Ttools &amp;lt;tab&amp;gt;&amp;lt;tab&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;I would like to have possible keys listed for given tool when typing &lt;code&gt;clojure -Ttools show &amp;lt;tab&amp;gt;&amp;lt;tab&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I was playing with &lt;a rel=&quot;nofollow&quot; href=&quot;https://devmanual.gentoo.org/tasks-reference/completion/index.html&quot;&gt;bash completion&lt;/a&gt; a bit and sort of managed to do first 2:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ clojure -T&amp;lt;tab&amp;gt;&amp;lt;tab&amp;gt;
-Tantq      -Tclj-new   -Toutdated  -Ttools

$ clojure -Ttools &amp;lt;tab&amp;gt;&amp;lt;tab&amp;gt;
install         install-latest  list            remove          show
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;using following script:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  #!/usr/bin/env bash

_clojure() {
  if [[ &quot;${COMP_CWORD}&quot; -eq 1 ]]; then
    local tools=($(clojure -Ttools list | tail --lines +2 | awk 'BEGIN {ORS=&quot; &quot;}{print $1}'))
    local options=()
    for tool in &quot;${tools[@]}&quot;; do
      options+=(&quot;-T${tool}&quot;)
    done
    COMPREPLY=($(compgen -W &quot;${options[*]}&quot; -- &quot;${COMP_WORDS[COMP_CWORD]}&quot;))
  elif [[ &quot;${COMP_CWORD}&quot; -eq 2 ]]; then
    local aliases=($(clojure -A:deps &quot;${COMP_WORDS[1]}&quot; help/dir))
    COMPREPLY=($(compgen -W &quot;${aliases[*]}&quot; -- &quot;${COMP_WORDS[COMP_CWORD]}&quot;))
  fi
}

complete -F _clojure clojure
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I'm not saying that clojure necessarily needs to come with some completion script (although that would be nice), but It could come with features allowing to write such script.&lt;/p&gt;
&lt;p&gt;It could e.g. read env variable &lt;code&gt;GEN_COMPLETION&lt;/code&gt; that if set to 1 - clojure would print list of completions so one could request list of tools like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ GEN_COMPLETION=1 clojure -T
-Tantq      -Tclj-new   -Toutdated  -Ttools
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I believe there might be an issue knowing if &quot;-T&quot; is an argument or part of the argument, so there could be another env GEN_COMPLETION_CURRENT_ARG=0 indicating that -T is part we're completing (akin to COMP_CWORD in bash) which would be set to empty string or not present if we want to complete next argument in the command line.&lt;/p&gt;
&lt;p&gt;As for completion for specific tools, they could provide some completion function that would be called when completing options of a specific tool.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14233/is-there-a-plan-to-have-completion-for-clojure-command</guid>
<pubDate>Fri, 08 Nov 2024 12:54:01 +0000</pubDate>
</item>
<item>
<title>How can I make Calva use a relative path when loading a file in cljs?</title>
<link>https://ask.clojure.org/index.php/14129/how-can-make-calva-use-relative-path-when-loading-file-in-cljs</link>
<description>&lt;p&gt;Is there a way to make &lt;code&gt;Calva: Load/Evaluate Current File and its Requires/Dependencies&lt;/code&gt; use a relative path for ClojureScript instead of an absolute path?&lt;/p&gt;
&lt;p&gt;I'm connecting to a docker container repl for development and the app is running at &lt;code&gt;/app&lt;/code&gt; inside the container. Loading the current file in Clojure works as expected and evaluating things that have already been loaded in ClojureScript works as expected. Loading the current file in ClojureScript fails because it uses the host machine's full path. I get the following error:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;; ------ REPL Error while processing ---------------------------------------------
; (cljs.core/load-file &quot;/home/bmaddy/.../model/user.cljc&quot;)
; FileNotFoundException: /home/bmaddy/.../model/user.cljc (No such file or directory)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The following all work in the cljs repl as expected:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;;; absolute path inside the container
(cljs.core/load-file &quot;/app/src/.../model/user.cljc&quot;)
[]
;; relative path from project folder
(cljs.core/load-file &quot;./src/.../model/user.cljc&quot;)
[]
(cljs.core/load-file &quot;src/.../model/user.cljc&quot;)
[]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I see there are &lt;code&gt;JACK_IN_PROJECT_ROOT_PATH&lt;/code&gt; and &lt;code&gt;calva.replConnectSequences.projectRootPath&lt;/code&gt; settings, but they don't seem to affect this.&lt;/p&gt;
&lt;p&gt;Some version info:&lt;br&gt;
Calva version used: &lt;code&gt;v2.0.474&lt;/code&gt;&lt;br&gt;
clojure-lsp version used: &lt;code&gt;2024.08.05-18.16.00&lt;/code&gt;&lt;br&gt;
VSCode Version: &lt;code&gt;1.93.1&lt;/code&gt;&lt;br&gt;
OS: Linux&lt;/p&gt;
</description>
<category>Calva</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14129/how-can-make-calva-use-relative-path-when-loading-file-in-cljs</guid>
<pubDate>Mon, 23 Sep 2024 18:35:32 +0000</pubDate>
</item>
<item>
<title>clojure is not starting on databricks file system (DBFS)</title>
<link>https://ask.clojure.org/index.php/14119/clojure-is-not-starting-on-databricks-file-system-dbfs</link>
<description>&lt;p&gt;DBFS (databricks file system) is not properly implementing POSIX permissions.&lt;br&gt;
Specially  the bash flag &quot;-w&quot; fails to detect a non-writable project directory properly.&lt;/p&gt;
&lt;p&gt;As a consequence in my case , starting clojure on DBFS  tries to write the .cpcache to current dir, which is failing as it is in fact read-only, and this cannot be overwritten.&lt;/p&gt;
&lt;p&gt;see here for details and  error messages:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://clojurians.slack.com/archives/C03S1KBA2/p1726750856210489&quot;&gt;https://clojurians.slack.com/archives/C03S1KBA2/p1726750856210489&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Changing unix file permission fails as well on DBFS&lt;/p&gt;
</description>
<category>Tools</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14119/clojure-is-not-starting-on-databricks-file-system-dbfs</guid>
<pubDate>Thu, 19 Sep 2024 19:01:08 +0000</pubDate>
</item>
<item>
<title>No way to specify Clojure version across all deps.edn files in a monorepo</title>
<link>https://ask.clojure.org/index.php/14112/way-specify-clojure-version-across-all-deps-files-monorepo</link>
<description>&lt;p&gt;Suppose you have &lt;code&gt;deps.edn&lt;/code&gt; at the root and then a bunch of sub-directories with their own &lt;code&gt;deps.edn&lt;/code&gt; files.&lt;/p&gt;
&lt;p&gt;If you want to have a set of common dependencies for all of the projects, you can simply have e.g. a &lt;code&gt;common&lt;/code&gt; directory where &lt;code&gt;common/deps.edn&lt;/code&gt; specifies all of the common dependencies and all the rest of &lt;code&gt;deps.edn&lt;/code&gt; files list &lt;code&gt;common&lt;/code&gt; as one of their deps.&lt;/p&gt;
&lt;p&gt;However, that doesn't work with &lt;code&gt;org.clojure/clojure&lt;/code&gt;, making it implicitly special.&lt;/p&gt;
&lt;p&gt;As I &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojurians.slack.com/archives/C03S1KBA2/p1725756729831549?thread_ts=1725754474.109679&amp;amp;cid=C03S1KBA2&quot;&gt;mentioned&lt;/a&gt; on Slack, it seems that &lt;code&gt;clojure.tools.deps/root-deps&lt;/code&gt; brings the default top-level version of &lt;code&gt;org.clojure/clojure&lt;/code&gt; and nothing else can override it but another top-level version.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14112/way-specify-clojure-version-across-all-deps-files-monorepo</guid>
<pubDate>Sun, 15 Sep 2024 19:46:47 +0000</pubDate>
</item>
<item>
<title>Refresh/Reload deps.edn changes in Calva + VS Code in WSL Ubuntu</title>
<link>https://ask.clojure.org/index.php/14054/refresh-reload-deps-edn-changes-in-calva-vs-code-in-wsl-ubuntu</link>
<description>&lt;p&gt;Hi, I am new to Clojure and am following &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.youtube.com/watch?v=LqVyP_EGKqw&amp;amp;list=PLRGAFpvDgm2ylbXYIjvu3kI426zAP_Lqc&amp;amp;index=1&quot;&gt;this tutorial&lt;/a&gt; to make a Clojure API. This uses Cursive plugin in IntelliJ, but I am using Calva in VS Code.&lt;/p&gt;
&lt;p&gt;This is my project structure: &lt;/p&gt;
&lt;pre&gt;&lt;code&gt; .
├── deps.edn
├── resources
│   └── config.edn
└── src
    └── clojure_api
        ├── config.clj
        └── core.clj
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;My &lt;code&gt;config.clj&lt;/code&gt; file contents:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(ns clojure-api.config
    (:require [aero.core :as aero]
            [clojure.java.io :as io]))

(defn read-config []
  (-&amp;gt; &quot;config.edn&quot;
      (io/resource)
      (aero/read-config)))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I changed my deps.edn file to add the paths &lt;code&gt;src&lt;/code&gt; &amp;amp; &lt;code&gt;resources&lt;/code&gt; like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{:deps {aero/aero {:mvn/version &quot;1.1.6&quot;}} :path [&quot;resources&quot; &quot;src&quot;]}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;while keeping the &lt;code&gt;config.edn&lt;/code&gt; file an empty map: &lt;code&gt;{}&lt;/code&gt;. However, I could not read the config file from &lt;code&gt;read-config&lt;/code&gt; function in &lt;code&gt;config.clj&lt;/code&gt;. It gave this error in Calva repl: &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;; Execution error (IllegalArgumentException) at aero.core/read-config-into-tagged-literal (core.cljc:194).
; Cannot open &amp;lt;nil&amp;gt; as a Reader.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The tutorial &lt;a rel=&quot;nofollow&quot; href=&quot;https://youtu.be/LqVyP_EGKqw?list=PLRGAFpvDgm2ylbXYIjvu3kI426zAP_Lqc&amp;amp;t=421&quot;&gt;solved this error&lt;/a&gt; in Cursive by refreshing the project structure. I cannot seem to find any such commands in Calva. How can I update/refresh my project structure in Calva so that the &lt;code&gt;deps.edn&lt;/code&gt; changes are reflected in the repl?&lt;/p&gt;
&lt;p&gt;I have tried to restart the repl, reopening the folder in VS code, shuffling the &lt;code&gt;resources&lt;/code&gt; directory around to no avail.&lt;/p&gt;
&lt;p&gt;I could not find related answers to this problem after googling, so any help will be appreciated. &lt;/p&gt;
</description>
<category>Calva</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14054/refresh-reload-deps-edn-changes-in-calva-vs-code-in-wsl-ubuntu</guid>
<pubDate>Mon, 19 Aug 2024 15:16:49 +0000</pubDate>
</item>
<item>
<title>Using log4j-layout-template-json with Leiningen</title>
<link>https://ask.clojure.org/index.php/13968/using-log4j-layout-template-json-with-leiningen</link>
<description>&lt;p&gt;Hi Everyone!&lt;/p&gt;
&lt;p&gt;I have a wired issue with creating jar files using lein, I added a new log4j-layout-template-json to my project and add a JSON template for logging using org.clojure/tools.logging f everything was working well when I was running things locally but when I try to run the project from the jar file I keep getting this error&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ERROR StatusConsoleListener Unable to locate plugin type for JsonTemplateLayout
ERROR StatusConsoleListener Unable to locate plugin for JsonTemplateLayout
ERROR StatusConsoleListener Could not create plugin of type class org.apache.logging.log4j.core.appender.ConsoleAppender for element Console: java.lang.NullPointerException: Cannot invoke &quot;org.apache.logging.log4j.core.config.plugins.util.PluginType.getElementName()&quot; because &quot;childType&quot; is null
 java.lang.NullPointerException: Cannot invoke &quot;org.apache.logging.log4j.core.config.plugins.util.PluginType.getElementName()&quot; because &quot;childType&quot; is null
    at org.apache.logging.log4j.core.config.plugins.visitors.PluginElementVisitor.findNamedNode(PluginElementVisitor.java:104)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So the project can't see the log4j-layout-template-json and I was able to make a working jar file by replacing /META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat with the file from the plugin itself so seems like the file gets overridden and the lein can't understand this Java plugin pattern&lt;br&gt;
So the question here is there a way to automate this process with Lein or moving to deps could solve the issue, thank you!&lt;br&gt;
project.clj file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defproject aa &quot;aa&quot;
  :description &quot;FIXME: write description&quot;
  :url &quot;http://example.com/FIXME&quot;
  :license {:name &quot;EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0&quot;
            :url &quot;https://www.eclipse.org/legal/epl-2.0/&quot;}
  :dependencies [[org.clojure/clojure &quot;1.11.3&quot;]
                 [org.clojure/tools.logging &quot;1.2.4&quot;]
                 [org.clojure/tools.cli &quot;0.3.1&quot;]
                 [org.clojure/core.async &quot;1.3.610&quot;]
                 [clj-commons/clj-yaml &quot;1.0.26&quot;]
                 [com.google.guava/guava &quot;31.1-jre&quot;]    
                 [io.netty/netty-all &quot;4.1.107.Final&quot;]
                 [org.clojure/core.match &quot;1.0.1&quot;]
                 [com.github.ben-manes.caffeine/caffeine &quot;3.1.8&quot;]
                 ;;;; Logging
                 [org.apache.logging.log4j/log4j-slf4j-impl &quot;2.20.0&quot;] ;; libraries using SLF4J won't complain
                 [org.apache.logging.log4j/log4j-api &quot;2.20.0&quot;]
                 [org.apache.logging.log4j/log4j-core &quot;2.20.0&quot;]
                 [org.apache.logging.log4j/log4j-layout-template-json &quot;2.20.0&quot;]]

  :jvm-opts [&quot;-Dlog4j2.configurationFile=resources/log4j2.properties&quot;
             &quot;-Dlog4j2.garbagefreeThreadContextMap=true&quot;
             &quot;-Dclojure.tools.logging.factory=clojure.tools.logging.impl/log4j2-factory&quot;]

  :test-selectors {:default (complement :integration)
                   :integration :integration}

  :main ^:skip-aot aa.core
  :target-path &quot;target/%s&quot;
  :profiles {:uberjar {:aot :all
                       :jvm-opts [&quot;-Dclojure.compiler.direct-linking=true&quot;]}})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Using this &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/arctype-co/log4j2-plugins-cache&quot;&gt;https://github.com/arctype-co/log4j2-plugins-cache&lt;/a&gt; plugin solves the issue for now but I want to know if there is a solution without including a new plugin&lt;/p&gt;
</description>
<category>Leiningen</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13968/using-log4j-layout-template-json-with-leiningen</guid>
<pubDate>Thu, 13 Jun 2024 07:58:28 +0000</pubDate>
</item>
<item>
<title>Does tools.deps treat a version (e.g. 1.2.3) as a range (i.e. [1.2.3,))?</title>
<link>https://ask.clojure.org/index.php/13950/does-tools-deps-treat-a-version-e-g-1-2-3-as-a-range-i-e-1-2-3</link>
<description>&lt;p&gt;Does tools.deps treat a version (e.g. 1.2.3) as a range (i.e. [1.2.3,)) like Maven and Gradle or like a fixed version (i.e. [1.2.3])? In addition, Maven has the concept of &quot;soft&quot; versions where the specified version is &quot;preferred&quot;. Does tools.deps have a similar concept?&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13950/does-tools-deps-treat-a-version-e-g-1-2-3-as-a-range-i-e-1-2-3</guid>
<pubDate>Wed, 05 Jun 2024 16:53:59 +0000</pubDate>
</item>
<item>
<title>tools.tools install-latest throws sha error with :coord  and never upgrades with :tool</title>
<link>https://ask.clojure.org/index.php/13882/tools-tools-install-latest-throws-error-coord-never-upgrades</link>
<description>&lt;p&gt;Thanks for &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/TDEPS-253&quot;&gt;https://clojure.atlassian.net/browse/TDEPS-253&lt;/a&gt;, however I noticed it doesn't quite work as expected for a fresh install (with &lt;code&gt;:coord&lt;/code&gt;); I get an error due to a missing sha, contrary to the doc string &quot;git coords may omit sha&quot;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;clj -Ttools install-latest \
:lib org/tool-name \
:coord '{:git/url &quot;git@gitlab.int.org.com:group/subgroup/tool-name.git&quot;}' \
:as tool-name

=&amp;gt;
Execution error (ExceptionInfo) at clojure.tools.deps.extensions.git/eval1656$fn (git.clj:79).
Library org/tool-name has coord with missing sha
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I also found upgrading a tool with saved coordinates (&lt;code&gt;clj -Ttools install-latest :tool tool-name&lt;/code&gt;) always results in &quot;Skipping, newest installed&quot; (because passing the &lt;code&gt;coord&lt;/code&gt; returned by &lt;code&gt;parse-install-latest-args&lt;/code&gt; to &lt;code&gt;install-1&lt;/code&gt; means &lt;code&gt;ext/find-all-versions&lt;/code&gt; is never evaluated). Looks like this issue would affect tools with auto resolved git urls too.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13882/tools-tools-install-latest-throws-error-coord-never-upgrades</guid>
<pubDate>Mon, 13 May 2024 10:24:47 +0000</pubDate>
</item>
<item>
<title>clojure -X:deps aliases fails for alias-as-data</title>
<link>https://ask.clojure.org/index.php/13867/clojure-x-deps-aliases-fails-for-alias-as-data</link>
<description>&lt;pre&gt;&lt;code&gt;(~/clojure/t)-(!2011)-&amp;gt; cat &amp;gt; deps.edn
{:aliases {:foo [&quot;some&quot; &quot;data&quot;]}}

Tue Apr 30 22:33:28
(~/clojure/t)-(!2012)-&amp;gt; clj
Clojure 1.12.0-alpha11
user=&amp;gt;

Tue Apr 30 22:33:37
(~/clojure/t)-(!2013)-&amp;gt; clojure -X:deps aliases
Execution error (ClassCastException) at clojure.tools.deps.cli.api/aliases$fn$fn (api.clj:170).
class java.lang.String cannot be cast to class java.util.Map$Entry (java.lang.String and java.util.Map$Entry are in module java.base of loader 'bootstrap')

Full report at:
/tmp/clojure-4544942395618193305.edn
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13867/clojure-x-deps-aliases-fails-for-alias-as-data</guid>
<pubDate>Wed, 01 May 2024 05:35:46 +0000</pubDate>
</item>
<item>
<title>Combining :exec-args from multiple aliases with user-defined semantics</title>
<link>https://ask.clojure.org/index.php/13800/combining-exec-args-from-multiple-aliases-defined-semantics</link>
<description>&lt;p&gt;I was looking for a way to invoke an nREPL server using &lt;code&gt;clojure -X&lt;/code&gt; and specify extra dependencies and middleware in separate aliases which would be composed together on the command line. &lt;/p&gt;
&lt;p&gt;For context: nREPL middleware are specified as a list of functions/runtime-resolved symbols, so ideally there would be some mechanism for each alias in the deps.edn to specify their own vector-of-middleware and have them concatenated in the order which the aliases were listed on the command line. (See below for concrete demonstration of this) &lt;/p&gt;
&lt;p&gt;Unfortunately I couldn't find a satisfactory way of achieving this via the clojure CLI - the issue is that  &lt;code&gt;:exec-args&lt;/code&gt; maps from different aliases are simply merged, with latter values overriding earlier ones.  The clojure.org reference mentions deep merging but this appears to be a doc error. &lt;/p&gt;
&lt;p&gt;(Note that the widespread use of  &lt;code&gt;-M&lt;/code&gt; for this use case does not afford any way of composing command-line string args, forcing each alias to couple together all middleware and dependencies.)&lt;/p&gt;
&lt;p&gt;Of course there shouldn't exist some magic set of semantics for merging &lt;code&gt;exec-arg&lt;/code&gt; values (vectors =&amp;gt; concat, maps =&amp;gt; merge etc.)... Nevertheless there might be a usability gap to fill here, letting users specify their own merging semantics declaratively rather than having to resort to custom-coded task runners .&lt;/p&gt;
&lt;p&gt;An example of how this would look like from the command line, given &lt;code&gt;concat&lt;/code&gt; semantics for the &lt;code&gt;:middleware&lt;/code&gt; arg:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ clojure -X:nrepl
Starting nREPL server with: nil

$ clojure -X:nrepl :port 1234
Starting nREPL server with: {:port 1234}

$ clojure -X:cider:nrepl :port 5678
Starting nREPL server with: {:port 5678 :middleware [cider.nrepl/cider-middleware]}

$ clojure -X:portal:cider:nrepl
Starting nREPL server with: {:middleware [portal.nrepl/wrap-portal, cider.nrepl/cider-middleware]}

$ clojure -X:cider:cljr:portal:nrepl
Starting nREPL server with: {:middleware [cider.nrepl/cider-middleware, refactor-nrepl.middleware/wrap-refactor, portal.nrepl/wrap-portal]}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;see this conversation in Slack thread for more context:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://clojurians.slack.com/archives/C6QH853H8/p1711461045176759&quot;&gt;https://clojurians.slack.com/archives/C6QH853H8/p1711461045176759&lt;/a&gt;&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13800/combining-exec-args-from-multiple-aliases-defined-semantics</guid>
<pubDate>Wed, 27 Mar 2024 12:32:27 +0000</pubDate>
</item>
<item>
<title>Option in `clojure` CLI command to print the basis</title>
<link>https://ask.clojure.org/index.php/13739/option-in-clojure-cli-command-to-print-the-basis</link>
<description>&lt;p&gt;It would be nice that &lt;code&gt;clojure&lt;/code&gt; could print the basis for a given combination of aliases (or none).&lt;/p&gt;
&lt;p&gt;A common use case is obtaining the computed &lt;code&gt;:paths&lt;/code&gt; for a combination of aliases.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13739/option-in-clojure-cli-command-to-print-the-basis</guid>
<pubDate>Thu, 15 Feb 2024 13:57:44 +0000</pubDate>
</item>
<item>
<title>Add workspace level config</title>
<link>https://ask.clojure.org/index.php/13728/add-workspace-level-config</link>
<description>&lt;p&gt;In our company we use a collection of projects. We want all of them to share common dependencies and aliases. For us it makes total sense to support additional config level most often called &quot;workspace level&quot; config in addition to other configs specified in &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.org/reference/clojure_cli#deps_sources&quot;&gt;https://clojure.org/reference/clojure_cli#deps_sources&lt;/a&gt;. Would it be possible to support that?&lt;/p&gt;
&lt;p&gt;We've tried two workarounds:&lt;br&gt;
 - put shared config in the user level config. This approach has these problems: 1) there is nowhere to store user settings. 2) we had to modify &lt;code&gt;CLJ_CONFIG&lt;/code&gt; to point to the location of the file.&lt;br&gt;
 - auto-generate &lt;code&gt;deps.edn&lt;/code&gt; files for each project. This approach works but it generates a lot of updates whenever a shared dependency is changed. This also doesn't leave much room for custom project-specific or workspace-specific settings since every config file is auto-generated.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13728/add-workspace-level-config</guid>
<pubDate>Wed, 14 Feb 2024 21:14:12 +0000</pubDate>
</item>
<item>
<title>Race condition in .cpcache directory creation</title>
<link>https://ask.clojure.org/index.php/13671/race-condition-in-cpcache-directory-creation</link>
<description>&lt;p&gt;As described in &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clojure/brew-install/pull/8&quot;&gt;https://github.com/clojure/brew-install/pull/8&lt;/a&gt;, in our CI we need to run several clojure tasks for the same project in parallel. Which sometimes fails with &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Refreshing classpath
Error building classpath. Can't create directory: /path/to/project/.cpcache
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;My understanding is that it is happening in &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clojure/tools.deps/blob/master/src/main/clojure/clojure/tools/deps/util/io.clj#L53-56&quot;&gt;https://github.com/clojure/tools.deps/blob/master/src/main/clojure/clojure/tools/deps/util/io.clj#L53-56&lt;/a&gt; where we first check whether a directory exists and then create it. &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(when-not (.exists parent)
  (when-not (.mkdirs parent)
    (let [parent-name (.getCanonicalPath parent)]
      (throw (ex-info (str &quot;Can't create directory: &quot; parent-name) {:dir parent-name})))))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If another process manages to create it after we checked for its existence, &lt;code&gt;.mkdirs&lt;/code&gt; returns false and this process fails. A possible solution would be to check for the directory existence again like &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clojure/tools.deps.alpha/pull/3/files#diff-9d69f30572d7d2f8b1b5b4216257178933c0d73ef285ae66bc97ae5acdab59cfR53-R57&quot;&gt;this&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(when-not (.exists parent)
  (when-not (.mkdirs parent)
    (when-not (.exists parent)
      (let [parent-name (.getCanonicalPath parent)]
        (throw (ex-info (str &quot;Can't create directory: &quot; parent-name) {:dir parent-name}))))))
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13671/race-condition-in-cpcache-directory-creation</guid>
<pubDate>Fri, 09 Feb 2024 00:24:08 +0000</pubDate>
</item>
<item>
<title>Typo in  :clojure.tools.deps.specs/claspath-args</title>
<link>https://ask.clojure.org/index.php/13601/typo-in-clojure-tools-deps-specs-claspath-args</link>
<description>&lt;p&gt;Hi Alex,&lt;/p&gt;
&lt;p&gt;I have a project in which I run tests with instrumentation turned on. The project has a dependency on tools.deps and I have the clojure.tools.deps.specs namespace loaded.&lt;/p&gt;
&lt;p&gt;When I run the tests in my project they fail with the following error:&lt;/p&gt;
&lt;p&gt;Unable to resolve spec: :clojure.tools.deps.specs/claspath-args&lt;/p&gt;
&lt;p&gt;It looks like there is a typo in a the usage of a spec here:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clojure/tools.deps/blob/master/src/main/clojure/clojure/tools/deps/specs.clj#L151&quot;&gt;https://github.com/clojure/tools.deps/blob/master/src/main/clojure/clojure/tools/deps/specs.clj#L151&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I think it should use the ::classpath-args spec, instead of ::claspath-args.&lt;/p&gt;
&lt;p&gt;Could you please take a look at this?&lt;/p&gt;
&lt;p&gt;Thanks, Roman.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13601/typo-in-clojure-tools-deps-specs-claspath-args</guid>
<pubDate>Thu, 04 Jan 2024 16:44:22 +0000</pubDate>
</item>
<item>
<title>clojure cli bug on windows</title>
<link>https://ask.clojure.org/index.php/13496/clojure-cli-bug-on-windows</link>
<description>&lt;p&gt;The following command run fine on pwsh&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;clojure -Sdeps '{:deps {nrepl/nrepl {:mvn/version &quot;1.0.0&quot;} cider/cider-nrepl {:mvn/version &quot;0.43.3&quot;}} :aliases {:cider/nrepl {:main-opts [&quot;-m&quot; &quot;nrepl.cmdline&quot; &quot;--middleware&quot; &quot;[cider.nrepl/cider-middleware]&quot;]}}}' -M:cider/nrepl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But fails on powershell (windows powershell 5.1) , when ran on windows powershell, the double quotes are removed , hence to run it on windows powershell we need to escape the douvble quotes are run the following command instead &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;clojure -Sdeps '{:deps {nrepl/nrepl {:mvn/version &quot;&quot;1.0.0&quot;&quot;} cider/cider-nrepl {:mvn/version &quot;&quot;0.43.3&quot;&quot;}} :aliases {:cider/nrepl {:main-opts [&quot;&quot;-m&quot;&quot; &quot;&quot;nrepl.cmdline&quot;&quot; &quot;&quot;--middleware&quot;&quot; &quot;&quot;[cider.nrepl/cider-middleware]&quot;&quot;]}}}' -M:cider/nrepl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Also this second command fails on pwsh (powershell dotnet) because the strings are double double quoted &lt;/p&gt;
&lt;p&gt;This issue, for me seem to be an issue with the clojure command, since as per the powershell docs, you should not need to escape double quotes inside a single quoted string &lt;/p&gt;
&lt;p&gt;I found this issue as I was trying cider on emacs, cider by default creates the second command, and by default fails when using pwsh&lt;/p&gt;
&lt;p&gt;Is this a problem than can be fixed, or should cider just handle pwsh different from powershell &lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13496/clojure-cli-bug-on-windows</guid>
<pubDate>Wed, 29 Nov 2023 01:21:42 +0000</pubDate>
</item>
<item>
<title>Does the clojure cli have an option to include new extensions for dependency resolution?</title>
<link>https://ask.clojure.org/index.php/13477/clojure-option-include-extensions-dependency-resolution</link>
<description>&lt;p&gt;From the source of &lt;code&gt;tools.deps&lt;/code&gt;, I see that git and Maven is implemented via extensions and multimethods. Is there a way for someone to write a third-party extension and tell the &lt;code&gt;clojure&lt;/code&gt; CLI tool to use it? e.g. an extension for SVN dependencies via &lt;code&gt;:svn&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;My company has an internal build system that is not &lt;code&gt;git&lt;/code&gt; or Maven based. It should be able to integrate with the current extensions framework within &lt;code&gt;deps&lt;/code&gt;. However, I can't seem to find a way to tell &lt;code&gt;clojure&lt;/code&gt; to load this extension file. It would be nice if we could configure via &lt;code&gt;deps.edn&lt;/code&gt; or a flag when calling &lt;code&gt;clojure&lt;/code&gt; to include other extension implementations.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13477/clojure-option-include-extensions-dependency-resolution</guid>
<pubDate>Mon, 20 Nov 2023 13:31:36 +0000</pubDate>
</item>
<item>
<title>In tools.deps, get the source of dependencies without downloading</title>
<link>https://ask.clojure.org/index.php/13446/tools-deps-get-the-source-dependencies-without-downloading</link>
<description>&lt;p&gt;When using the tools.deps API, I would like to resolve dependencies without downloading all of the jars, and I would like the return value to tell me the original URL of the dependency, rather than the path on disk. &lt;/p&gt;
&lt;p&gt;The reason is I use bazel + &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/griffinbank/rules_clojure&quot;&gt;https://github.com/griffinbank/rules_clojure&lt;/a&gt;, and if I have the URL, I can immutably cache artifacts in bazel, and have that cache be shared with all other developers at work. &lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13446/tools-deps-get-the-source-dependencies-without-downloading</guid>
<pubDate>Thu, 09 Nov 2023 17:01:03 +0000</pubDate>
</item>
<item>
<title>Test suit doesn't find function implemented in my solution</title>
<link>https://ask.clojure.org/index.php/13348/test-suit-doesnt-find-function-implemented-in-my-solution</link>
<description>&lt;p&gt;I have submitted a solution to the &lt;code&gt;bird watcher&lt;/code&gt; problem, and the test suit complains that it doesn't find the function &lt;code&gt;day-without-birds&lt;/code&gt;. Visual Studio Code is able to import it and run it from another file.&lt;/p&gt;
&lt;p&gt;The full implementation of the solution is as follows:&lt;/p&gt;
&lt;p&gt;Solution&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(ns bird-watcher)

 (def last-week [0 2 5 3 7 8 4])

 (defn last_position [v]
   (- (clojure.core/count v) 1))

 (defn today [birds]
   (get birds (last_position birds)))

(defn inc-bird [birds]
  (assoc birds (last_position birds)  (+ (today birds) 1)))

(defn day-without-birds
  [birds]
  (loop [y birds]
    (let [[x &amp;amp; rest] y]
      (if (= x 0)
        true
        (if (empty? rest)
          false
          (recur rest))))))
 
 

(defn n-days-count [birds n]
  (reduce + (take n birds)))

(defn busy [day]
  (if (&amp;gt; day 5)
    1
    0))

(defn busy-days [birds]
  (reduce + (map busy birds)))

(defn odd-week-internal
  [birds x]
  (loop [y birds
         target x]
    (let [[x &amp;amp; rest] y
          target (- 1 target)]
      (if (= x target)
        (if (empty? rest)
          true
          (recur rest target))
        false))))

(defn odd-week [birds]
  (odd-week-internal birds 0))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Thank you in advance!&lt;/p&gt;
</description>
<category>Portal</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13348/test-suit-doesnt-find-function-implemented-in-my-solution</guid>
<pubDate>Sun, 01 Oct 2023 14:05:15 +0000</pubDate>
</item>
<item>
<title>Is tools.build considering adding a :license argument?</title>
<link>https://ask.clojure.org/index.php/13341/is-tools-build-considering-adding-a-license-argument</link>
<description>&lt;p&gt;Now that Clojars requires licenses, projects that need to go up there need a license block in the pom files of their jars. Using build.tools it's possible to create a pom.xml, manually edit it to include a license section, then create a jar using that pom. But, that's manual.&lt;/p&gt;
&lt;p&gt;Are there plans to add an option for &lt;code&gt;write-pom&lt;/code&gt; (and &lt;code&gt;gen-pom&lt;/code&gt;) to allow programmatic insertion of a license?&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13341/is-tools-build-considering-adding-a-license-argument</guid>
<pubDate>Fri, 29 Sep 2023 17:17:01 +0000</pubDate>
</item>
<item>
<title>Tagged literals in Clojure CLI arguments and deps.edn</title>
<link>https://ask.clojure.org/index.php/13278/tagged-literals-in-clojure-cli-arguments-and-deps-edn</link>
<description>&lt;p&gt;As it stands there is no way for the Clojure CLI to extend the reader with tagged literals for use within arguments or deps.edn.&lt;/p&gt;
&lt;p&gt;I propose that some mechanism for this should be added, which can enable additional tooling to use the intended use case of putting data within aliases in deps.edn where they otherwise would be restricted by data readers.&lt;/p&gt;
&lt;p&gt;An example of a current project which would benefit from this is Codox, which has support for regular expression based filters on namespaces to be documented, however as the default EDN reader does not include support for regular expressions, this feature is unusable.&lt;/p&gt;
&lt;p&gt;If tagged literals support was added to the Clojure CLI, this problem could be resolved by a &lt;code&gt;#jvm/regex&lt;/code&gt; tag or similar being added for that usecase.&lt;/p&gt;
&lt;p&gt;If this feature is added it should also be considered what happens when a deps.edn file or argument to the CLI includes a tagged literal which is not bound in the current invocation.&lt;/p&gt;
&lt;p&gt;There are multiple ways that support could be added to the CLI, and below I present a few of my own thoughts on the matter, but this is not a request for this to be the way that the feature is implemented, just some ideas.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tagged literals could be added via aliases in the user deps.edn which are then used by default in all projects&lt;/li&gt;
&lt;li&gt;Tagged literals could be specified by an environment variable, which users can then set with direnv or other tooling&lt;/li&gt;
&lt;/ul&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13278/tagged-literals-in-clojure-cli-arguments-and-deps-edn</guid>
<pubDate>Tue, 12 Sep 2023 21:02:35 +0000</pubDate>
</item>
<item>
<title>clj/clojure scripts throws a stacktrace with unknown command-line argument</title>
<link>https://ask.clojure.org/index.php/13240/clojure-scripts-throws-stacktrace-unknown-command-argument</link>
<description>&lt;p&gt;When clj or clojure is run with unknown argument (e.g. -v or -p) it will report this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Execution error (FileNotFoundException) at java.io.FileInputStream/open0 (FileInputStream.java:-2).
-p (No such file or directory)

Full report at:
/tmp/clojure-814615935521714016.edn
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Instead of throwing a confusing exception and stacktrace, it should report that command line argument is wrong and user should run --help for more options. Example of grep:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ grep --xxx
grep: unrecognized option '--xxx'
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Example of leiningen:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ lein -xxx
'-xxx' is not a task. See 'lein help'.
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13240/clojure-scripts-throws-stacktrace-unknown-command-argument</guid>
<pubDate>Thu, 31 Aug 2023 12:45:03 +0000</pubDate>
</item>
<item>
<title>Accepting &quot;-&quot; as argument to read non edn data fails with `-X` cli invocation</title>
<link>https://ask.clojure.org/index.php/13229/accepting-argument-read-non-edn-data-fails-with-invocation</link>
<description>&lt;p&gt;I have a clojure command line app that is invoked with &lt;code&gt;-X&lt;/code&gt;. One of the conveniences is to allow &quot;-&quot; as a value which means to read from stdin. Currently, the data formats allowed are JSON and edn. This used to work, but now gives an error for non edn data:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Execution error at clojure.run.exec/read-args-stdin (exec.clj:152).
Invalid token: :
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here's an example usage:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/phronmophobic/viscous&quot;&gt;https://github.com/phronmophobic/viscous&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cat data.json | clojure -X:viscous :json-file -
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I was able to find the commit where this changed, but this behavior doesn't seem to be documented anywhere (although it is very difficult to search for &quot;-&quot;).&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13229/accepting-argument-read-non-edn-data-fails-with-invocation</guid>
<pubDate>Tue, 29 Aug 2023 05:53:24 +0000</pubDate>
</item>
<item>
<title>clojure.tools.deps/calc-basis can fail with &quot;Unable to resolve&quot; due to a version range</title>
<link>https://ask.clojure.org/index.php/13201/clojure-tools-deps-calc-basis-unable-resolve-version-range</link>
<description>&lt;p&gt;The following code:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://gist.github.com/vemv/0254e4f594626b090520f1da323f9476&quot;&gt;https://gist.github.com/vemv/0254e4f594626b090520f1da323f9476&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(I used a gist due to this site's 12000 character limit)&lt;/p&gt;
&lt;p&gt;...will fail with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Unable to resolve org.clojure/clojure version: [1.2.1],[1.3.0]
{:lib org.clojure/clojure, :coord #:mvn{:version &quot;[1.2.1],[1.3.0]&quot;}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Perhaps it's worth noting that &lt;code&gt;[org.clojure/clojure #:mvn{:version &quot;1.11.1&quot;}]&lt;/code&gt; is already explicitly specified.&lt;/p&gt;
&lt;p&gt;I'm using &lt;code&gt;org.clojure/tools.deps &quot;0.18.1354&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Thanks - V&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13201/clojure-tools-deps-calc-basis-unable-resolve-version-range</guid>
<pubDate>Sat, 26 Aug 2023 06:26:56 +0000</pubDate>
</item>
<item>
<title>Support for binary resources and large resources via deps cli.</title>
<link>https://ask.clojure.org/index.php/13199/support-for-binary-resources-and-large-resources-via-deps-cli</link>
<description>&lt;p&gt;I've written a few libraries that depend on binary resources (eg. native shared libraries) and other libraries that have very large resources (eg. the llm weights for llama).&lt;/p&gt;
&lt;p&gt;In principle, both of these types of dependencies can be satisfied by the deps tools without any changes since the deps cli can fetch resources and add them to classpath.&lt;/p&gt;
&lt;p&gt;However, there are few additional challenges which makes using the deps cli for large and/or binary resources awkward.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Large resources are Large&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I've avoided using the deps machinery for large resources because there are several affordances missing:&lt;/p&gt;
&lt;p&gt; a) no yes/no prompt before downloading dependencies. &lt;/p&gt;
&lt;p&gt;It seems reasonable to download maybe 100's of megabytes of dependencies when invoking the cli, but it doesn't feel right for the cli to download gigabytes of data dependencies without asking first&lt;/p&gt;
&lt;p&gt;b) no progress indicator when downloading dependencies&lt;/p&gt;
&lt;p&gt;Downloading dependencies is usually pretty quick, but it's nice to have a progress indicator if several gigabytes of dependencies are being downloaded.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Native dependencies are often large&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Native dependencies can range from a few megabytes all the way to a gigabyte (eg. Chromium embedded framework).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Native dependencies are platform/OS dependent&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I think there's some maven magic that helps with this which I haven't had a chance to look into. Anyway, the artifacts required for running depend on the platform that the program is running on. Usually, it's ok to include the artifacts for all possible platforms, but that may be unnecessarily using resources and might not work in particular cases.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Shared libraries must be extracted from jars before loading&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Many ffi libraries (like JNA) will do this for you. It's implemented in an adhoc way depending on the ffi library. It may or may not work depending on whether the shared library is standalone or depends on other shared libraries.&lt;/p&gt;
&lt;p&gt;Potentially, the deps tools could help extract shared libraries using an acceptable, uniform method.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Precompiled linux shared libraries barely work&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It's possible to precompile shared libraries for mac osx and windows with a wide range of compatibility that &quot;just work&quot;. With linux, there are lots of caveats. Generally, it seems like you can get something that mostly works if you have a standalone shared library and compile it with zig (eg. llmdb), but compatibility goes way down if there are multiple dependent shared libraries that don't use zig (eg. graphviz).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Native dependencies should be compiled from source?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Some package managers ship precompiled binaries (eg. conda), but it seems like many package managers tend to compile from source (eg. pip, macports, homebrew, etc). &lt;/p&gt;
&lt;p&gt;Compiling from source may help with some of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;compiling from source sidesteps many of the challenges of providing native dependencies on linux&lt;/li&gt;
&lt;li&gt;native deps could be git deps!&lt;/li&gt;
&lt;li&gt;Some devs really dislike precompiled binaries and strongly prefer compiling from source.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Obviously, supporting compiling from source has its own challenges.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The above covers many of the problems with large and/or binary resources. Here are some concrete use cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;clj-cef: wraps the chromium embedded framework. The framework itself is about 0.5-1.5gb depending on the platform and includes both shared libraries and large resource files. There's also an additional small, shared library required.&lt;/li&gt;
&lt;li&gt;clj-graphviz: wraps the graphviz c libraries. Extra tricky because there are multiple shared libraries and each shared libraries have additional dependencies (eg. libpng).&lt;/li&gt;
&lt;li&gt;llama.clj: wraps the llama.cpp library for running llms locally. It would also be nice to add specific llm weights as dependencies, but they can be very large (eg. a few gigabytes up to hundreds of gigabytes). Further, llama.cpp can be compiled with gpu support, but I haven't figured out how to do in a portable way without a compile from source option.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;I know there's a lot of overlap with existing tools, so maybe there's some way for the deps cli to integrate with those existing tools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fetching native deps: pip, conda, homebrew, macports, apt, scoop, etc.&lt;/li&gt;
&lt;li&gt;fetching data dependencies: hugging face, &lt;a rel=&quot;nofollow&quot; href=&quot;https://dvc.org/&quot;&gt;https://dvc.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Anyway, I've made multiple attempts at finding a good approach for including native and/or large dependencies and all of the options still feel pretty awkward. &lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13199/support-for-binary-resources-and-large-resources-via-deps-cli</guid>
<pubDate>Fri, 25 Aug 2023 00:58:32 +0000</pubDate>
</item>
<item>
<title>install-latest does not use coords to find versions in self-hosted git</title>
<link>https://ask.clojure.org/index.php/13160/install-latest-does-not-use-coords-find-versions-self-hosted</link>
<description>&lt;p&gt;&lt;code&gt;clojure.tools.tools.api/install-latest&lt;/code&gt; (and  &lt;code&gt;clojure.tools.tools.api/install-1&lt;/code&gt;) don't pass the &lt;code&gt;coord&lt;/code&gt; returned by &lt;code&gt;clojure.tools.deps.tool/resolve-tool&lt;/code&gt; to &lt;code&gt;clojure.tools.deps.extensions/find-all-versions&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This means it will never find versions for git libs hosted anywhere that isn't supported by &lt;code&gt;clojure.tools.deps.extensions.git/auto-git-url&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;It would be great if this was changed to support updating tools from non-standard git hosts.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13160/install-latest-does-not-use-coords-find-versions-self-hosted</guid>
<pubDate>Tue, 15 Aug 2023 11:11:52 +0000</pubDate>
</item>
<item>
<title>Problem with leiningen and a local library</title>
<link>https://ask.clojure.org/index.php/13157/problem-with-leiningen-and-a-local-library</link>
<description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I have two ClojureScript projects. From the first one (html-ui-lib) I created a JAR file with the following commands and installed it in a local repository:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;lein with-profile prod jar
lein localrepo install -r /home/muenkel/soft/Global/clojure-repo target/html-ui-lib-0.1.2-SNAPSHOT.jar html-ui-lib 0.1.2-SNAPSHOT
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In the second project (via-trans) I try to use this library. For this purpose I have included the library in the project file. Unfortunately, not all files of the JAR file are installed. What am I doing wrong?&lt;/p&gt;
&lt;p&gt;Here is the content of the JAR file:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt; 245 Fri Aug 11 00:02:34 CEST 2023 META-INF/MANIFEST.MF&lt;br&gt;
  3268 Fri Aug 11 00:02:34 CEST 2023 META-INF/maven/html-ui-lib/html-ui-lib/pom.xml&lt;br&gt;
  3183 Fri Aug 11 00:02:34 CEST 2023 META-INF/leiningen/html-ui-lib/html-ui-lib/project.clj&lt;br&gt;
   783 Fri Aug 11 00:02:34 CEST 2023 META-INF/leiningen/html-ui-lib/html-ui-lib/README.md&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; 0 Fri Aug 11 00:02:32 CEST 2023 META-INF/
 0 Fri Aug 11 00:02:32 CEST 2023 META-INF/maven/
 0 Fri Aug 11 00:02:32 CEST 2023 META-INF/maven/html-ui-lib/
 0 Fri Aug 11 00:02:32 CEST 2023 META-INF/maven/html-ui-lib/html-ui-lib/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;   158 Fri Aug 11 00:02:32 CEST 2023 META-INF/maven/html-ui-lib/html-ui-lib/pom.properties&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; 0 Fri Aug 11 00:01:30 CEST 2023 public/
 0 Tue Jul 11 23:15:06 CEST 2023 public/css/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  2715 Tue Jul 11 23:15:06 CEST 2023 public/css/style.css&lt;br&gt;
   151 Sun Mar 26 21:35:54 CEST 2023 public/test.html&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; 0 Fri Aug 11 00:02:32 CEST 2023 public/cljs-out/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;   554 Mon Apr 17 22:11:34 CEST 2023 public/index.html&lt;br&gt;
   417 Sat Apr 08 23:03:08 CEST 2023 public/devcards.html&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; 0 Sat Jul 22 23:08:08 CEST 2023 html_ui_lib/
 0 Wed May 10 20:49:58 CEST 2023 html_ui_lib/util/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  1100 Wed May 10 20:49:58 CEST 2023 html_ui_lib/util/limit-lines.cljs&lt;br&gt;
  1123 Thu May 04 23:27:52 CEST 2023 html_ui_lib/core.cljs&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; 0 Tue Jul 18 21:06:24 CEST 2023 html_ui_lib/spec/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;   272 Sun Jun 04 00:13:12 CEST 2023 html_ui_lib/spec/email-value-specs.cljs&lt;br&gt;
  1883 Tue Jul 18 21:06:24 CEST 2023 html_ui_lib/spec/value_specs.cljs&lt;br&gt;
   213 Wed Jun 07 23:31:32 CEST 2023 html_ui_lib/spec/text_value_specs.cljs&lt;br&gt;
  3871 Wed Jun 07 23:14:28 CEST 2023 html_ui_lib/spec/ui-specs.cljs&lt;br&gt;
   267 Wed Jun 07 23:26:06 CEST 2023 html_ui_lib/spec/number_value_specs.cljs&lt;br&gt;
   185 Sat May 20 23:56:54 CEST 2023 html_ui_lib/spec/date_value_specs.cljs&lt;br&gt;
   178 Wed May 31 00:26:16 CEST 2023 html_ui_lib/spec/drop_down_value_specs.cljs&lt;br&gt;
  1545 Mon Jul 17 22:55:08 CEST 2023 html_ui_lib/spec/type_specs.cljs&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; 0 Tue Jul 18 20:59:58 CEST 2023 html_ui_lib/ui/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  3234 Tue Jun 06 21:32:30 CEST 2023 html_ui_lib/ui/input_email.cljs&lt;br&gt;
  4298 Tue Jul 18 20:59:58 CEST 2023 html_ui_lib/ui/tree_view.cljs&lt;br&gt;
  3361 Wed May 24 22:41:30 CEST 2023 html_ui_lib/ui/input_text.cljs&lt;br&gt;
  3420 Sat Jun 03 21:42:24 CEST 2023 html_ui_lib/ui/input_date.cljs&lt;br&gt;
  6013 Wed Jun 07 23:35:28 CEST 2023 html_ui_lib/ui/input_number.cljs&lt;br&gt;
  2029 Wed Jul 12 22:42:44 CEST 2023 html_ui_lib/ui/core.cljs&lt;br&gt;
   396 Fri Apr 07 21:19:26 CEST 2023 html_ui_lib/ui/button.cljs&lt;br&gt;
   844 Tue Jul 11 23:13:50 CEST 2023 html_ui_lib/ui/output_boolean.cljs&lt;br&gt;
  1127 Wed Jul 12 23:57:34 CEST 2023 html_ui_lib/ui/input_checkbox.cljs&lt;br&gt;
   276 Sun Apr 23 22:59:54 CEST 2023 html_ui_lib/ui/grid_container.cljs&lt;br&gt;
   603 Thu Jun 08 22:50:00 CEST 2023 html_ui_lib/ui/output_number.cljs&lt;br&gt;
  1613 Mon Jul 10 21:58:34 CEST 2023 html_ui_lib/ui/input_radio.cljs&lt;br&gt;
   381 Sun Apr 09 00:16:22 CEST 2023 html_ui_lib/ui/table.cljs&lt;br&gt;
  1775 Sat Jul 01 22:19:10 CEST 2023 html_ui_lib/ui/drop_down_list.cljs&lt;br&gt;
  2789 Wed Jun 28 22:57:44 CEST 2023 html_ui_lib/ui/leaf_template.cljs&lt;br&gt;
   313 Thu Jun 08 23:19:22 CEST 2023 html_ui_lib/ui/output_text.cljs&lt;br&gt;
  2160 Thu Jul 13 23:36:30 CEST 2023 html_ui_lib/ui/input_password.cljs&lt;br&gt;
   519 Wed Jun 07 22:44:34 CEST 2023 html_ui_lib/test_runner.cljs&lt;br&gt;
   860 Wed Jun 07 22:57:28 CEST 2023 html_ui_lib/number_value_specs_test.cljs&lt;br&gt;
   273 Wed May 24 21:17:16 CEST 2023 html_ui_lib/text_value_specs_test.cljs&lt;br&gt;
  1090 Tue May 30 23:24:06 CEST 2023 html_ui_lib/value_specs_test.cljs&lt;br&gt;
  7280 Wed Jun 07 23:07:38 CEST 2023 html_ui_lib/ui_specs_test.cljs&lt;br&gt;
  2274 Wed May 24 21:37:08 CEST 2023 html_ui_lib/type_specs_test.cljs&lt;br&gt;
   305 Wed May 24 23:44:04 CEST 2023 html_ui_lib/drop_down_value_specs_test.cljs&lt;br&gt;
   260 Sun Mar 26 21:35:54 CEST 2023 html_ui_lib/core_test.cljs&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here, on the other hand, is the content of the directory with the library. As you can see, only the files of the namespace ui are contained here:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;via-trans/resources/public/cljs-out/dev/html_ui_lib/
└── ui
    ├── core.cljs
    ├── core.cljs.cache.json
    ├── core.js
    ├── core.js.map
    ├── input_text.cljs
    └── input_text.js
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here is the project.clj file of html_ui_lib:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;(defproject html-ui-lib &quot;0.1.2-SNAPSHOT&quot;&lt;br&gt;
  :description &quot;FIXME: write this!&quot;&lt;br&gt;
  :url &quot;&lt;a rel=&quot;nofollow&quot; href=&quot;http://example.com/FIXME&quot;&gt;http://example.com/FIXME&lt;/a&gt;&quot;&lt;br&gt;
  :license {:name &quot;Eclipse Public License&quot;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;        :url &quot;http://www.eclipse.org/legal/epl-v10.html&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  :min-lein-version &quot;2.7.1&quot;&lt;br&gt;
  :dependencies [[clj-commons/citrus &quot;3.3.0&quot;]&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;             [cljs-ajax &quot;0.8.1&quot;]
             [funcool/struct &quot;1.4.0&quot;]
             [org.clojure/clojure &quot;1.10.0&quot;]
             [org.clojure/clojurescript &quot;1.11.60&quot;]
             [rum &quot;0.12.10&quot;]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;;;:deps {io.github.clj-kondo/config-rum-rum {:mvn/version &quot;0.12.10&quot;}}&lt;br&gt;
  :global-vars {&lt;em&gt;warn-on-reflection&lt;/em&gt; true}&lt;br&gt;
  ;;:global-vars {&lt;em&gt;asserts&lt;/em&gt; false}&lt;br&gt;
  :source-paths [&quot;src/cljs&quot; &quot;test/cljs&quot;]&lt;br&gt;
  :aliases {&quot;fig:build&quot; [&quot;trampoline&quot; &quot;run&quot; &quot;-m&quot; &quot;figwheel.main&quot; &quot;-b&quot; &quot;dev&quot; &quot;-r&quot;]&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;        &quot;fig:min&quot;   [&quot;run&quot; &quot;-m&quot; &quot;figwheel.main&quot; &quot;-O&quot; &quot;advanced&quot; &quot;-bo&quot; &quot;dev&quot;]
        &quot;prod:build&quot; [&quot;run&quot; &quot;-m&quot; &quot;figwheel.main&quot; &quot;-O&quot; &quot;advanced&quot; &quot;-bo&quot; &quot;prod&quot;]}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  :profiles {:dev {:dependencies [[com.bhauman/figwheel-main &quot;0.2.18&quot;]&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;                              [org.slf4j/slf4j-nop &quot;1.7.30&quot;]
                              [com.bhauman/rebel-readline-cljs &quot;0.1.4&quot;]
                              [devcards &quot;0.2.7&quot;]
                              ;; for informing the linter clj-kondo, that the macros
                              ;; defc etc defines symbols
                              [io.github.clj-kondo/config-rum-rum &quot;1.0.0&quot;]]
               :source-paths [&quot;devcards/cljs&quot;]
               :resource-paths [&quot;target&quot;]
               ;; need to add the compiled assets to the :clean-targets
               :clean-targets ^{:protect false} [&quot;target&quot; &quot;resources/public/cljs-out&quot;]
               #_:global-vars #_{*asserts* false}}
         :prod {:dependencies [[com.bhauman/figwheel-main &quot;0.2.18&quot;]]
                :compiler {:optimizations :advanced
                           :pretty-print false}
                :clean-targets ^{:protect false}
                [&quot;target&quot;
                 &quot;resources/public/cljs-out/prod&quot;
                 &quot;resources/public/cljs-out/prod-main.js&quot;]
                :cljsbuild {:builds
                            [{:source-paths [&quot;src/cljs&quot;]
                              :compiler
                              {:output-to &quot;resources/public/cljs-out/prod-main.js&quot;
                               :optimizations :advanced
                               :pretty-print false}
                              :build nil}]}
                :plugins [[lein-cljsbuild &quot;1.1.8&quot;]]}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  :plugins [[com.github.clj-kondo/lein-clj-kondo &quot;0.2.4&quot;]&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;        [com.fabiodomingues/lein-clj-depend &quot;0.3.0&quot;] ;; Usage: lein clj-depend
        ;; Detects curcular referencies
        [lein-kibit &quot;0.1.8&quot;] ; Code Analyzer: https://github.com/clj-commons/kibit
                                    ; Anounced better code alternatives
                                    ; Usage: lein kibit
                                    ; Automatic: lein auto kibit
                                    ; With replace: lein kibit --replace --interactive
        ])
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here is the project file of via-trans:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;(defproject via-trans &quot;0.1.0-SNAPSHOT&quot;&lt;br&gt;
  :description &quot;FIXME: write description&quot;&lt;br&gt;
  :url &quot;&lt;a rel=&quot;nofollow&quot; href=&quot;http://example.com/FIXME&quot;&gt;http://example.com/FIXME&lt;/a&gt;&quot;&lt;br&gt;
  :dependencies [;;[camel-snake-kebab &quot;0.4.3&quot;] ; Libray used for converting keywords&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;             [ch.qos.logback/logback-classic &quot;1.4.4&quot;]
             [cljs-ajax &quot;0.8.1&quot;]
             [clj-commons/citrus &quot;3.3.0&quot;]
             ;;[clojure.java-time &quot;1.1.0&quot;]
             ;;[cljc.java-time &quot;RENAMED&quot;]
             [cljc.java-time &quot;0.1.18&quot;]
             [conman &quot;0.9.6&quot;] ; Library used for creating functions from sql
             [cprop &quot;0.1.19&quot;]   ; Configuration
             [devcards &quot;0.2.7&quot;]
             [expound &quot;0.9.0&quot;]
             [funcool/struct &quot;1.4.0&quot;]
             [com.layerware/hugsql &quot;0.5.3&quot;] ; Replacement for conman
             ;[hugsql-adapter-case &quot;0.1.0&quot;] ; case adapter for db table columns 
             [html-ui-lib &quot;0.1.2-SNAPSHOT&quot;]
             [json-html &quot;0.4.7&quot;]
             [luminus-transit &quot;0.1.5&quot;]
             [luminus-undertow &quot;0.1.18&quot;]
             [luminus/ring-ttl-session &quot;0.3.3&quot;]
             [org.mariadb.jdbc/mariadb-java-client &quot;1.1.5&quot;]
             ;;[mysql/mysql-connector-java &quot;8.0.18&quot;]
             [markdown-clj &quot;1.11.3&quot;]
             [metosin/muuntaja &quot;0.6.8&quot;]
             [metosin/reitit &quot;0.5.18&quot;]
             [metosin/ring-http-response &quot;0.9.3&quot;]
             [mount &quot;0.1.16&quot;]
             [nrepl &quot;1.0.0&quot;]
             [org.clojure/clojure &quot;1.11.1&quot;]
             [org.clojure/clojurescript &quot;1.11.60&quot;]
             [org.clojure/tools.cli &quot;1.0.214&quot;]
             [org.clojure/tools.logging &quot;1.2.4&quot;]
             [org.webjars.npm/bulma &quot;0.9.4&quot;]
             [org.webjars.npm/material-icons &quot;1.10.8&quot;]
             [org.webjars/webjars-locator &quot;0.45&quot;]
             [org.webjars/webjars-locator-jboss-vfs &quot;0.1.0&quot;]
             [ring-webjars &quot;0.2.0&quot;]
             [ring/ring-core &quot;1.9.6&quot;]
             [ring/ring-defaults &quot;0.3.4&quot;]
             [rum &quot;0.12.10&quot;]
             [selmer &quot;1.12.55&quot;]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  :min-lein-version &quot;2.0.0&quot;&lt;br&gt;
  :source-paths [&quot;src/clj&quot; &quot;src/cljc&quot; &quot;src/cljs&quot; &quot;devcards/cljs&quot;]&lt;br&gt;
  :test-paths [&quot;test/clj&quot; &quot;test/cljc&quot; &quot;test/cljs&quot;]&lt;br&gt;
  :resource-paths [&quot;resources&quot; &quot;target&quot;]&lt;br&gt;
  :clean-targets ^{:protect false} [&quot;target&quot; &quot;resources/public/cljs-out&quot;]&lt;br&gt;
  :target-path &quot;target/%s/&quot;&lt;br&gt;
  :main ^:skip-aot via-trans.core&lt;br&gt;
  :plugins [] &lt;br&gt;
  :profiles&lt;br&gt;
  {:uberjar {:omit-source true&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;         :aot :all
         :uberjar-name &quot;via-trans.jar&quot;
         :source-paths [&quot;env/prod/clj&quot; ]
         :resource-paths [&quot;env/prod/resources&quot;]}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;   :dev           [:project/dev :profiles/dev]&lt;br&gt;
   :test          [:project/dev :project/test :profiles/test]&lt;br&gt;
   :project/dev  {:jvm-opts [&quot;-Dconf=dev-config.edn&quot; ]&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;              :dependencies [[com.bhauman/figwheel-main &quot;0.2.18&quot;]
                             [com.bhauman/rebel-readline-cljs &quot;0.1.4&quot;]
                             [org.clojure/tools.namespace &quot;1.3.0&quot;]
                             [pjstadig/humane-test-output &quot;0.11.0&quot;]
                             [prone &quot;2021-04-23&quot;]
                             [ring/ring-devel &quot;1.9.6&quot;]
                             [ring/ring-mock &quot;0.4.0&quot;]]
              :plugins      [[com.jakemccrary/lein-test-refresh &quot;0.24.1&quot;]
                             [jonase/eastwood &quot;1.2.4&quot;]
                             ;;[cider/cider-nrepl &quot;0.28.4&quot;] ; ist in .lein/profiles.clj
                             ]   
              :source-paths [&quot;env/dev/clj&quot; ]
              :resource-paths [&quot;env/dev/resources&quot; &quot;target&quot;]
              :repl-options {:init-ns user
                             :timeout 120000}
              :injections [(require 'pjstadig.humane-test-output)
                           (pjstadig.humane-test-output/activate!)]}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;   :project/test {:jvm-opts [&quot;-Dconf=test-config.edn&quot; ]&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;              :resource-paths [&quot;env/test/resources&quot;] }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;   :profiles/dev {}&lt;br&gt;
   :profiles/test {}})&lt;/p&gt;
&lt;/blockquote&gt;
</description>
<category>Leiningen</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13157/problem-with-leiningen-and-a-local-library</guid>
<pubDate>Sun, 13 Aug 2023 07:35:33 +0000</pubDate>
</item>
<item>
<title>Unable to locate a Java Runtime</title>
<link>https://ask.clojure.org/index.php/13107/unable-to-locate-a-java-runtime</link>
<description>&lt;p&gt;I try to learn Clojure and follow Clojure for the Brave and True book.&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;core.clj&lt;/code&gt; file, I typed &lt;code&gt;M-x cider-jack-in&lt;/code&gt; command. I see following error:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;error in process sentinel: Could not start nREPL server: The operation couldn’t be completed. Unable to locate a Java Runtime.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I tried both 8 and 17 versions of Java, I verified them via &lt;code&gt;which java&lt;/code&gt; and &lt;code&gt;echo $JAVA_HOME&lt;/code&gt; &lt;/p&gt;
&lt;p&gt;&lt;code&gt;Lein&lt;/code&gt; commands works by themselves.&lt;/p&gt;
&lt;p&gt;Can you help me?&lt;/p&gt;
</description>
<category>CIDER</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13107/unable-to-locate-a-java-runtime</guid>
<pubDate>Sat, 29 Jul 2023 18:13:11 +0000</pubDate>
</item>
<item>
<title>make-classpath2 in tools.deps cannot be run from a directory other than the project one</title>
<link>https://ask.clojure.org/index.php/13084/make-classpath2-tools-deps-cannot-directory-other-project</link>
<description>&lt;p&gt;In Cursive's new deps integration, I invoke &lt;code&gt;make-classpath2&lt;/code&gt; from within IntelliJ, which means that the CWD is not the project directory. I bind &lt;code&gt;clojure.tools.deps.util.dir/*the-dir*&lt;/code&gt; when I do this, and most things work correctly. However, there are some exceptions which don't work:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:mvn/local-repo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:local/root&lt;/code&gt; deps inside &lt;code&gt;:override-deps&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:classpath-overrides&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It would be nice if they could be made to work too. If there's interest in a patch for this I could have a go at it.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13084/make-classpath2-tools-deps-cannot-directory-other-project</guid>
<pubDate>Fri, 14 Jul 2023 13:49:38 +0000</pubDate>
</item>
<item>
<title>Path to installed man pages by Clojure POSIX installer script</title>
<link>https://ask.clojure.org/index.php/13083/path-to-installed-man-pages-clojure-posix-installer-script</link>
<description>&lt;p&gt;The POSIX installer worked great for me on OpenBSD, thank you!&lt;/p&gt;
&lt;p&gt;The resulting man pages were located in /usr/local/share/man which is not documented AFAICT (maybe I am wrong about this?)&lt;/p&gt;
&lt;p&gt;Proposed solution: Add that path to the documentation.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13083/path-to-installed-man-pages-clojure-posix-installer-script</guid>
<pubDate>Thu, 13 Jul 2023 21:54:57 +0000</pubDate>
</item>
<item>
<title>Feature request for Clojure CLI: Some way to specify OS-conditional values for :local/root in deps.edn</title>
<link>https://ask.clojure.org/index.php/13072/feature-request-clojure-specify-conditional-values-local</link>
<description>&lt;p&gt;This problem arose trying to run a Clojure project on WSL2 from a project originally built on Windoze.&lt;/p&gt;
&lt;p&gt;The original :local/root paths started with &quot;C:/...&quot; but on WSL2 (running Ubuntu 22) they need to be converted to &quot;/mnt/c/...&quot; to run.&lt;/p&gt;
&lt;p&gt;Manually changing them makes them work, but it's a hassle. Won't even mention source control woes.&lt;/p&gt;
&lt;p&gt;Imagining automatic conversion rules feels dreadful, it would be better if we could simply specify OS-specific values. Maybe something like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{some.ns/some-lib {:local/root 
                    {:local-path/windows &quot;C:/...&quot; 
                     :local-path/linux &quot;/mnt/c/...&quot; 
                     :local-path/macos &quot;/some/other/dev/path&quot;}}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At runtime, the correct local-path should be selected for the value based on the OS on which the JVM is running.&lt;/p&gt;
&lt;p&gt;Surely this can also be a problem on MacOS running Parallels, where file system integration is also tight but the Guest OS can have different values for the same paths on the Host. And knowing what these might be a priori is probably not practical, given the Cambrian explosion of Linux distributions, Windows editions, and MacOS versions. It would be the developer's responsibility to set these values based on a concrete development setup. So, IMHO, it would be enough optionally to offer some ability to provide a map with certain high-level OS options in place of a string.&lt;/p&gt;
&lt;p&gt;It also seems obvious to me that these values will always be developer-centric and possibly subject to employer devops policies.&lt;/p&gt;
&lt;p&gt;(Yes, this is my implementation bias, but I would gladly support any general way to handle this problem.)&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13072/feature-request-clojure-specify-conditional-values-local</guid>
<pubDate>Sat, 08 Jul 2023 12:57:54 +0000</pubDate>
</item>
<item>
<title>Could the CLI check for the latest stable version?</title>
<link>https://ask.clojure.org/index.php/13020/could-the-cli-check-for-the-latest-stable-version</link>
<description>&lt;p&gt;Given the number of people (mostly beginners) who seem to run into problems with the CLI because they have an older version and are following either newer instructions or trying to use libraries that rely on newer features, I wonder whether it would be worth adding a check to the script that would output a warning if the current stable version is more recent (from the download site)?&lt;/p&gt;
&lt;p&gt;I know that won't help people who already have an old version installed but it would at least help future people...&lt;/p&gt;
&lt;p&gt;...or is the command-line &quot;API&quot; stable enough at this point that it wouldn't be worth it?&lt;/p&gt;
&lt;p&gt;Examples include the changing semantics for both -M and -T over the years, support for :git/sha (vs :sha), and several other changes, both in tools.deps itself and the CLI script.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13020/could-the-cli-check-for-the-latest-stable-version</guid>
<pubDate>Mon, 19 Jun 2023 18:49:58 +0000</pubDate>
</item>
<item>
<title>incorrect test?  clojure.tools.deps.test-deps/test-dep-choice</title>
<link>https://ask.clojure.org/index.php/12951/incorrect-test-clojure-tools-deps-test-deps-test-dep-choice</link>
<description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clojure/tools.deps/blob/master/src/test/clojure/clojure/tools/deps/test_deps.clj#L141-L144&quot;&gt;test-dep-choice&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There is no call to &lt;code&gt;is&lt;/code&gt;, so test succeeds trivially.&lt;br&gt;
I think the correct value to compare against should be &lt;code&gt;{:a &quot;1&quot;, :b &quot;1&quot;, :c &quot;2&quot;}&lt;/code&gt; instead of &lt;code&gt;{:a 1, :b 1, :c 2}&lt;/code&gt;, looking at other tests in this area.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/12951/incorrect-test-clojure-tools-deps-test-deps-test-dep-choice</guid>
<pubDate>Thu, 18 May 2023 04:01:47 +0000</pubDate>
</item>
<item>
<title>proper XDG support</title>
<link>https://ask.clojure.org/index.php/12911/proper-xdg-support</link>
<description>&lt;p&gt;XDG_CONFIG_HOME does not need to be set explicitly, and tools follow XDG spec should just write to $HOME/.config/clojure&lt;/p&gt;
&lt;p&gt;Right now, if XDG_CONFIG_HOME is not set, it just writes to $HOME/.clojure&lt;/p&gt;
&lt;p&gt;more context here also:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://clojureverse.org/t/opinion-about-xdg-support-by-the-clojure-tools-deps-cli/9814/3&quot;&gt;https://clojureverse.org/t/opinion-about-xdg-support-by-the-clojure-tools-deps-cli/9814/3&lt;/a&gt;&lt;/p&gt;
</description>
<category>Tools</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/12911/proper-xdg-support</guid>
<pubDate>Wed, 03 May 2023 03:05:05 +0000</pubDate>
</item>
<item>
<title>Shutdown Morse Gracefully?</title>
<link>https://ask.clojure.org/index.php/12910/shutdown-morse-gracefully</link>
<description>&lt;p&gt; I will be starting it many times per day -is that safe?  If not, how does one shutdown morse gracefully?&lt;/p&gt;
</description>
<category>Morse</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/12910/shutdown-morse-gracefully</guid>
<pubDate>Mon, 01 May 2023 18:20:15 +0000</pubDate>
</item>
<item>
<title>Installing Clojure</title>
<link>https://ask.clojure.org/index.php/12901/installing-clojure</link>
<description>&lt;p&gt;Well, I followed advise from the Clojure Workshop and installed Leiningen that came with its own REPL.&lt;/p&gt;
&lt;p&gt;I also followed on-site advise to install ClojureTools using Powershell.&lt;/p&gt;
&lt;p&gt;I also have Calva and other Clojure extensions installed on VS Code.&lt;/p&gt;
&lt;p&gt;Could I suggest that a ClojureTools.msi file be created, so that installing Clojure can be a painless action.&lt;/p&gt;
</description>
<category>Tools</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/12901/installing-clojure</guid>
<pubDate>Wed, 26 Apr 2023 08:43:10 +0000</pubDate>
</item>
<item>
<title>Specify a custom classpath</title>
<link>https://ask.clojure.org/index.php/12882/specify-a-custom-classpath</link>
<description>&lt;p&gt;As a way to deal with concurrency issues when compiling several projects in parallel I  introduced a temporary compilation folder for each clojure instance (which is then merged with the primary cache in an atomic file move). The simplest way to specify this folder to JVM is by passing it on the command line. Unfortunately, when I run clojure using &lt;code&gt;clojure&lt;/code&gt; script there seem to be no option to pass an extra classpath item. Would be great to introduce it. Something like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;clojure -Saddcp=/tmp/classes215632
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;that ends up adding &lt;code&gt;/tmp/classes215632&lt;/code&gt; to the overall classpath generated from deps.edn file.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/12882/specify-a-custom-classpath</guid>
<pubDate>Wed, 19 Apr 2023 23:59:18 +0000</pubDate>
</item>
</channel>
</rss>