Nem biztos benne, hogyan tud futni
lein run
-main metódus nélkül, ezért itt van néhány mintakód:
project.clj
(defproject testi "0.1.0-SNAPSHOT"
:main fstego.core
:dependencies [[org.clojure/clojure "1.6.0"]])
src/fstego/core.clj
(ns fstego.core
(:import [javax.imageio ImageIO])
(:import [java.io File]))
(defn -main[& args]
(if-let [ path (first args) ]
(let[ img (ImageIO/read (File. path))]
(println
"Input Image has the following dimensions: "
(.getWidth img) "x" (.getHeight img)))
(println "No image")))
És akkor
lein run <path_to_image>
Valami ilyesmit kellene kiadnia:
Input Image has the following dimensions: 251 x 60
Szerkesztés Miért nem található a java import a lein run futtatásakor?
A névtér fő metódusának futtatása előtt a fordítási fázis lefut, és a konkrét direktíva nélkül a névteret idő előtt lefordítják (aot néven) Java-ra. A funkció letiltásához hozzá kell adnia ezt a project.clj fájlhoz
:main ^:skip-aot fstego.core
Ha megtisztítja a célmappát, és újra végrehajtja a lein run parancsot, az importálást mindenhol megtalálja, ahol hozzáadja őket.
Ha nem adja meg a feladat kihagyását, vagy ha közvetlenül egy jar fájlból szeretné meghívni a fő metódust, akkor az életciklus más.
A névtér futtatása azt jelenti, hogy a kód ugyanúgy fut le, mint a REPL-ben, így az importhívások végrehajtásra kerülnek, és a hivatkozott osztályok megtalálhatók.
A fő metódus közvetlenül a lefordított bájtkódból történő futtatása azt jelenti, hogy az importálási hívás nem szerepel a bájtkódban, így figyelmen kívül hagyja, így az ImageIO hívása nem találja meg megfelelően az osztályt.
19.06.2015