我正试图用Intellij的草书中的Leiningen插件从我的裸骨Clojure项目中制作一个独立的罐子。
为了创建该项目,我刚刚创建了project.clj文件,打开了它,并提供了将其作为一个项目导入的草书。
project.clj:
(defproject WaterTimer "1"
:description "A timer that reminds you to drink water"
:main tone-producer/main)制音员
(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中。隐式AOT of :main将在Leiningen 3.0.0中删除。如果您只需要在uberjar中使用AOT,可以考虑将:aot :all添加到您的:uberjar配置文件中。警告: jar中不存在指定的主类。它可能无法按预期执行。包含主方法的命名空间中可能缺少gen类指令。创建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编译失败:子进程失败
结构如下:
- project.clj
- target
如能提供任何指导,将不胜感激。
发布于 2016-07-12 13:48:53
经过一段时间的摆弄
(:require [general-helpers :as g]),因为没有必要对这个问题进行降级
:gen-class需要AOT --正如Sanchayan所指出的,
project.clj
(defproject WaterTimer "0.0.1"
:description "A timer that reminds you to drink water"
:dependencies [[org.clojure/clojure "1.8.0"]] ;; <- [1]
:main tone-producer
:aot [tone-producer]) ;; <- [2]在文件名中使用'_‘而不是'-’
(ns tone-producer
(:import [javax.sound.midi MidiSystem
Synthesizer
MidiChannel])
(:gen-class))
(defn -main [& args]
(println "Test!"))结果:
$ lein uberjar
Compiling tone-producer
Compiling tone-producer
Created .../watertimer/target/WaterTimer-0.0.1.jar
Created .../watertimer/target/WaterTimer-0.0.1-standalone.jar
$ java -jar target/WaterTimer-0.0.1-standalone.jar
Test!通常,我建议通过命令行插入一个带有lein new <name>的项目,并将其导入到所选的Cursive/其他IDE中。
发布于 2016-07-12 13:06:43
对于创建uberjars,项目文件应该具有:aot关键字,可以提前编译。
这是我的project.clj文件的输出。
(defproject jdbc "0.1.0-SNAPSHOT"
:description "JDBC Project"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.8.0"]
[org.clojure/java.jdbc "0.6.1"]
[postgresql "9.3-1102.jdbc41"]
[com.mchange/c3p0 "0.9.5.2"]
[byte-streams "0.2.2"]]
:main jdbc.core
:aot [jdbc.core])注意:main和:aot条目。而且,它需要是-main,正如鸟蜘蛛已经说过的那样。
https://stackoverflow.com/questions/38329515
复制相似问题