Uso lein uberjar per creare un jar autonomo di un'applicazione.Clojure Uberjar che non carica il file di risorse
Quando si esegue
java -jar dataloader-0.1.0-SNAPSHOT-standalone.jar,
si blocca con:
Caused by: java.lang.IllegalArgumentException: Not a file:
jar:file:dataloader-0.1.0-SNAPSHOT-standalone.jar!/configuration.json
si carica il file tramite:
(ns dataloader.configuration
(:gen-class)
(:require [cheshire.core :refer :all]
[clojure.java.io :as io]))
(def data-file
(io/file
(io/resource "configuration.json")))
project.clj
(defproject dataloader "0.1.0-SNAPSHOT"
:description "Used for loading stage data into local vagrantbox"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:resource-paths ["resources"]
:dependencies [[org.clojure/clojure "1.6.0"]
[clojurewerkz/elastisch "2.1.0"]
[org.clojure/java.jdbc "0.3.7"]
[mysql/mysql-connector-java "5.1.32"]
[clj-http "2.0.0"]
[org.clojure/data.json "0.2.6"]
[org.clojure/data.codec "0.1.0"]
[cheshire "5.5.0"]]
:main ^:skip-aot dataloader.core
:target-path "target/%s"
:profiles {:uberjar {:aot :all}})
risorse/configuration.json è messo nella cartella principale del vaso
In seguito chiamo slurp sul file. Il problema è che il file non è stato trovato. Quando si sviluppa, funziona. –
No, l'errore dice "Non è un file". Non dice "File non trovato". Vedi questo: https://clojuredocs.org/clojure.java.io/resource –
Avevi ragione. Dovevo bere direttamente sulla risorsa. –