如何修复Leiningen的:aot警告

16

我正在收到

Warning: specified :main without including it in :aot.
If you only need AOT for your uberjar, consider adding :aot :all into your
:uberjar profile instead.

这是我的 project.clj 文件

(defproject korma-test "0.1.0-SNAPSHOT"
  :description "korma db test"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]
                 [korma "0.3.0-RC5"]
                 ]
   :main korma-test.core)

这里是core.clj

(ns korma-test.core
  (require [korma.db :as kdb])
  (require [clojure.string :as str])
  (:use [clojure.tools.cli])
  (:import java.util.Date)
  (:gen-class)
)
; Parses for options passed in on the command line.

(defn parse-opts
  "Using the newer cli library, parses command line args."
  [args]
  (cli args
       (optional ["-host" "Informix host" :default "localhost"] )
       (optional ["-port" "Informix host's service port" :default "1498"] )
       (required ["-username" "user name"] )
       (required ["-password" "password"] )
       (optional ["-database" "Informix host's database" :default "stores7/ministores.dbs" ] )))


(defn -main 
  [& args]
  (if (= 0 (count args))
    (println "Usage: korma-test --host <host-name> --port <port-num> --database <db-name>")
    (let [opts (parse-opts args)
          start-time (str (Date.))]
          (def db-config {:classname "com.informix.jdbc.IfxDriver"
                          :subprotocol "postgresql"
                          :subname (format "//%s:(:port opts)/%s" 
                                           (:host opts)
                                           (:database opts))
                          :user (:user opts)
                          :password (:password opts)})

          (kdb/defdb db db-config)

    (println opts))))

我不确定在哪里添加:aot才能消除警告。


你正在运行哪个版本的Leiningen?你何时收到这个警告? - KobbyPemson
@KobbyPemson 我的错,没有发布所有的core.clj文件。我收到了这个错误警告:在没有包含它在:aot中的情况下指定了:main。 隐式AOT的:main将在Leiningen 3.0.0中被删除。 即使有一个主函数,如果你只需要AOT来制作uberjar,请考虑将:aot :all添加到你的:uberjar配置文件中。 - octopusgrabbus
1个回答

14
我记得以前它可以不用警告就能工作,但无论如何现在你需要在你的project.clj文件中添加一个:aot指令。 请参见这里 以下是有效的。

project.clj

(defproject korma-test "0.1.0-SNAPSHOT"
  :description "korma db test"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]
                 [korma "0.3.0-RC5"]
                 [org.clojure/tools.cli "0.3.1"]]
   :main korma-test.core
   :aot [korma-test.core])

core.clj

(ns korma-test.core
  (:require [korma.db :as kdb])
  (:require [clojure.string :as str])
  (:require [clojure.tools.cli :as c])
  (:import java.util.Date)
  (:gen-class))

; Parses for options passed in on the command line.

    (defn parse-opts
      "Using the newer cli library, parses command line args."
      [args]
      (c/cli args
           [ ["-host" "Informix host" :default "localhost"] 
            ["-port" "Informix host's service port" :default "1498"] 
            ["-username" "user name"] 
            ["-password" "password"] 
            ["-database" "Informix host's database" :default "stores7/ministores.dbs" ]]))


(defn -main 
  [& args]
  (if (= 0 (count args))
    (println "Usage: korma-test --host <host-name> --port <port-num> --database <db-name>")
    (let [opts (parse-opts args)
          start-time (str (Date.))
          db-config {:classname "com.informix.jdbc.IfxDriver"
                          :subprotocol "postgresql"
                          :subname (format "//%s:(:port opts)/%s" 
                                           (:host opts)
                                           (:database opts))
                          :user (:user opts)
                          :password (:password opts)}]
          (kdb/defdb db db-config)
    (println opts))))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接