首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能用Leiningen建一个罐子

不能用Leiningen建一个罐子
EN

Stack Overflow用户
提问于 2016-07-12 12:54:45
回答 2查看 3.2K关注 0票数 6

我正试图用Intellij的草书中的Leiningen插件从我的裸骨Clojure项目中制作一个独立的罐子。

为了创建该项目,我刚刚创建了project.clj文件,打开了它,并提供了将其作为一个项目导入的草书。

project.clj:

代码语言:javascript
复制
(defproject WaterTimer "1"
  :description "A timer that reminds you to drink water"
  :main tone-producer/main)

制音员

代码语言:javascript
复制
(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中省略该名称。

代码语言:javascript
复制
(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编译失败:子进程失败

结构如下:

  • WaterTimer
    • 钢筋混凝土
      • tone-producer.clj

代码语言:javascript
复制
- project.clj
- target

如能提供任何指导,将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-12 13:48:53

经过一段时间的摆弄

  • 我放弃了(:require [general-helpers :as g]),因为没有必要对这个问题进行降级
  • 错误:无法找到或加载主类clojure.main编译失败的
    • 您没有包含clojure依赖项1

  • :gen-class需要AOT --正如Sanchayan所指出的,
    • 见2

project.clj

代码语言:javascript
复制
(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]

在文件名中使用'_‘而不是'-’

代码语言:javascript
复制
(ns tone-producer
  (:import [javax.sound.midi MidiSystem
                             Synthesizer
                             MidiChannel])
  (:gen-class))

(defn -main [& args]
  (println "Test!"))

结果:

代码语言:javascript
复制
$ 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中。

票数 4
EN

Stack Overflow用户

发布于 2016-07-12 13:06:43

对于创建uberjars,项目文件应该具有:aot关键字,可以提前编译。

这是我的project.clj文件的输出。

代码语言:javascript
复制
(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,正如鸟蜘蛛已经说过的那样。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38329515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档