{{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。