Clojure Uberjar没有加载资源文件

时间:2015-08-26 17:10:28

标签: jar clojure resources leiningen uberjar

我使用lein uberjar创建一个应用程序的独立jar。

执行时

CD(char password_entered) {
它崩溃了:

java -jar dataloader-0.1.0-SNAPSHOT-standalone.jar,

我通过以下方式加载文件:

Caused by: java.lang.IllegalArgumentException: Not a file:
jar:file:dataloader-0.1.0-SNAPSHOT-standalone.jar!/configuration.json

project.clj

(ns dataloader.configuration
  (:gen-class)
  (:require [cheshire.core :refer :all]
            [clojure.java.io :as io]))

(def data-file
  (io/file
    (io/resource "configuration.json")))

resources / configuration.json被放入jar的根文件夹

2 个答案:

答案 0 :(得分:10)

clojure.java.io/resource返回一个网址,而不是文件。这就是为什么你可以打电话给slurp的原因。错误消息告诉您它不是文件,遗憾的是它没有告诉您它是一个网址。

当然你可以用java.net.URL api打开网址,虽然在这种情况下会有点过分。

答案 1 :(得分:4)

如果您想阅读configuration.json文件的内容,请不要致电io/file。相反,使用slurp函数,如:

(def config (slurp (io/resource "configuration.json")))