【发布时间】:2016-11-14 17:35:34
【问题描述】:
我正在尝试使用 Intellij's Cursive 中的 Leiningen 插件从我的基本 Clojure 项目中制作一个独立的 jar。
为了创建项目,我刚刚创建了 project.clj 文件,将其打开,然后 Cursive 提供将其作为项目导入。
project.clj:
(defproject WaterTimer "1"
:description "A timer that reminds you to drink water"
:main tone-producer/main)
tone-producer.clj:
(ns tone-producer
(:require [general-helpers :as g])
(:import [javax.sound.midi MidiSystem
Synthesizer
MidiChannel])
(:gen-class))
(defn main [& args]
(println "Test!"))
当我运行“uberjar”任务时,我得到以下输出:
警告:指定 :main 而不将其包含在 :aot 中。 :main 的隐式 AOT 将在 Leiningen 3.0.0 中删除。 如果您的 uberjar 只需要 AOT,请考虑将 :aot :all 添加到您的 :uberjar 个人资料。 警告:指定的 Main-Class 在 jar 中不存在。它可能无法按预期执行。包含 main 方法的命名空间中可能缺少 gen-class 指令。 创建 C:\Users\slomi\IdeaProjects\WaterTimer\target\WaterTimer-1.jar 创建 C:\Users\slomi\IdeaProjects\WaterTimer\target\WaterTimer-1-standalone.jar
我还尝试将main 函数更改为具有默认名称,并从defproject 中省略名称:
(defproject WaterTimer "1"
:description "A timer that reminds you to drink water"
:main tone-producer)
(ns tone-producer
(:require [general-helpers :as g])
(:import [javax.sound.midi MidiSystem
Synthesizer
MidiChannel])
(:gen-class))
(defn -main [& args]
(println "Test!"))
但现在我得到了错误:
错误:无法找到或加载主类 clojure.main 编译失败:子进程失败
结构是:
- 饮水机
- 源
- tone-producer.clj
- project.clj
- 目标
- 源
如有任何指导,我们将不胜感激。
【问题讨论】:
-
尝试重命名主
-main/ 或在您的第二个方法中从 project.clj 中删除:main- 编辑:等待通常没有src/<ns>/core.clj- 您的项目布局看起来很奇怪 -
如果我这样做
lein new watertimer我会得到 gist.github.com/birdspider/dcb987f881199f0a6721af4d8fd41a10 - 也许你可以尝试以这种方式启动项目。 -
进一步你的defproject缺少clojure
:dependencies(即:dependencies [[org.clojure/clojure "1.8.0"]])因此你得到第二个Error -
@birdspider core.clj 只是 lein 使用的一个随机名称,因为没有其他名称足够通用,人们保留它实际上有点烦人
标签: clojure executable-jar leiningen