【问题标题】:Can't run uberjar with Leiningen 2.5.2无法使用 Leiningen 2.5.2 运行 uberjar
【发布时间】:2015-12-09 20:34:10
【问题描述】:

我试图再次使用 Clojure,但一开始就跌跌撞撞。我下载了 lein,并复制了以下 project.cljhello.clj 以确保我有一个最小的工作示例。

project.clj:

(defproject hello "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.7.0"]]
  :uberjar {:aot :all}
  :main hello.core
  )

你好.clj:

(ns hello.core
  (:gen-class)
  )
(defn -main
  "This should be pretty simple."
  []
  (println "Hello, World!"))

当我运行“./lein uberjar”时,会收到以下警告:

Warning: specified :main without including it in :aot. 
Implicit AOT of :main will be removed in Leiningen 3.0.0. 
If you only need AOT for your uberjar, consider adding :aot :all into your
:uberjar profile instead.
Warning: The Main-Class specified does not exist within the jar. It may not be executable as expected. A gen-class directive may be missing in the namespace which contains the main method.
Created .../target/hello-0.1.0-SNAPSHOT.jar
Created .../target/hello-0.1.0-SNAPSHOT-standalone.jar

尝试使用./lein runjava -jar ./target/hello-0.1.0-SNAPSHOT-standalone.jar 运行它会导致异常:

Can't find 'hello.core' as .class or .clj for lein run: please check the spelling.
Exception in thread "main" java.io.FileNotFoundException: Could not locate hello/core__init.class or hello/core.clj on classpath., compiling:(/private/var/folders/28/bk6d4xj123b0xvsvk91_1jg80009rn/T/form-init1007755193774766954.clj:1:125)

那么我的问题是什么?

【问题讨论】:

  • 更新:我什至尝试了lein new app 并将main: app.core 添加到项目中。结果相同。

标签: clojure leiningen


【解决方案1】:

:uberjar {:aot :all} -> :profiles {:uberjar {:aot :all}}

并将 hello.clj 移动到 ./src/hello 目录并重命名为 core.clj

【讨论】:

  • 好的,谢谢!做到了。此外,应用程序模板缺少主函数和 :gen-class。现在我有所有的拼图了!
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 2017-06-19
  • 2021-12-14
  • 2020-07-26
  • 2014-10-01
  • 2015-01-13
  • 2015-11-27
  • 1970-01-01
相关资源
最近更新 更多