请在2024 Clojure现状调查!中分享您的想法。

欢迎!有关此工作方式的更多信息,请参阅关于页面。

+1
Clojure
已关闭

{{target/clojure.jar}}(或Maven仓库中的jar)的manifest中设置了Main-Class,这给人一种可以将其作为独立包装的JAR应用程序运行的印象。

然而,用
`java -jar clojure-${version}.jar`
将导致

`

Exception in thread "main" java.lang.ExceptionInInitializerError
at clojure.main.<clinit>(main.java:20)
Caused by: Syntax error compiling at (clojure/main.clj:1:1).
at clojure.lang.Compiler.load(Compiler.java:7647)
...
... 1 more
Caused by: java.io.FileNotFoundException: Could not locate clojure/spec/alpha__init.class, clojure/spec/alpha.clj or clojure/spec/alpha.cljc on classpath.
at clojure.lang.RT.load(RT.java:466)
at clojure.lang.RT.load(RT.java:428)

`

(当然,如果顶层{{clojure.jar}}在本地配置文件中与依赖项阴影构建,它将完美无瑕地工作。)

然而,对于{{java -jar}},在命令行中无法修改类路径({{-cp}}被忽略),只能作为manifest中的Class-Path条目。
我更希望看到由{{java}}报告的干净的

`no main manifest attribute...`
而不是在这种情况下引发异常ExIIError和堆栈跟踪。

审查: Alex Miller - 正确构建没有主类的标准Clojure,但继续构建具有主类(包括spec依赖项的一个)的本地jar。

标记为已解决: 在1.10.2-rc1中修复

5 答案

0

评论者:alexmiller

谢谢,非常好。

0

评论者:pzygielo

我看到它将1.11指定为修复版本,但我还看到了对1.10.1的准备。CLJ-2459是否能包括在1.10.1中呢?

0

评论者:alexmiller

我们试图将1.10.1中的更改集中在非常集中的一点,因此它将等待1.11。

0

评论者:pzygielo

明白了,谢谢。

0
参考:[https://clojure.atlassian.net/browse/CLJ-2459](https://clojure.atlassian.net/browse/CLJ-2459)(由 pzygielo 提出)
...