2024 年 Clojure 状态调查! 中分享您的想法。

欢迎!请参阅 关于 页面获取更多关于此功能的信息。

0
工具
重新分类

我的 deps.edn 文件中有两个别名

{
 :deps
 {
  org.clojure/spec.alpha {:mvn/version "0.2.194"}
  aleph/aleph {:mvn/version "0.4.7-alpha7"}
  hiccup/hiccup {:mvn/version "2.0.0-alpha2"}
  }

 :aliases 
 { 
  :web-server {
               :exec-fn web.network-service/run 
               :exec-args {:port 8080} 
               }
  :test-web-server { 
                    :exec-fn test.tnetwork-service/run 
                    :exec-args {:port 9090}
                    }
  }
 }

当调用时

clojure -X:web-server

我得到

Function not found: web.network-service/run

当调用时一切正常

clojure -X:test-web-server

我不明白为什么会这样,执行函数基本上是相同的。请查看完整代码这里
我在全局 deps.edn 文件中设置了 :paths ["." "src"]

2 答案

+1

被选中
 
最佳答案

您在 src/web/network_service.clj 中的拼写有误

(ns web.netwok-service

缺少了一个 r,所以命名空间与文件名不匹配,无法正确要求。

by
非常感谢您的查看。真是太尴尬了。也许这应该是通过可以在clojure cli管道中的某个东西来cough的?
by
如果在REPL中尝试(这是我调试的方式),那么需要 require web.network-service 并且会找到一个匹配的文件,然后加载它,这样就留下了定义的命名空间 web_netwok-service。

在那个点上,调用 web.network-service/run 的 requiring-resolve将会抛出异常 - 并且CLI会告诉你所请求的函数不存在。

我想这时可以区分nil和异常,并为每种情况提供不同的错误消息(nil表示ns已加载但无法解析函数,异常表示ns加载失败:它缺失或有语法错误)。
by
太好了!谢谢你,Alex!
by
很棒,谢谢。在发布时我会对我的打字错误进行回归测试。错误信息显示命名空间应该会让打字错误的人意识到。
0
by

Clojure CLI (clojure --version)的版本是什么?

你尝试过使用-Sforce吗?

by
Clojure CLI版本 1.10.3.933

感谢Sean Corfield,他发现了exec-fn文件中ns声明中的一个错别字。我们认为这可能是Clojure CLI捕捉到的。请参阅Sean在其评论中的建议。
欢迎来到Clojure问答社区,在这里您可以向Clojure社区成员提出问题并获得答案。
...