{{target/clojure.jar}}(或在Maven仓库中的.jars)的清单中设置了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}}被忽略),而只能作为清单中的Class-Path条目。
我更希望看到如下的输出
`
no main manifest attribute...`
被java报告,而不是在异常和堆栈跟踪情况下报告
审核者: Alex Miller - 正确构建了没有主类的正常Clojure,但继续构建局部jar,该jar包含主类(其中一个包含依赖项)。