【问题标题】:Clojure Uberjar not loading resource fileClojure Uberjar 不加载资源文件
【发布时间】:2015-11-20 20:23:04
【问题描述】:

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

执行时

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

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

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

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

项目.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}})

resources/configuration.json 放到jar的根目录

【问题讨论】:

    标签: jar clojure resources leiningen uberjar


    【解决方案1】:

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

    当然,您可以使用 java.net.URL api 打开 url,尽管在这种情况下这将是矫枉过正。

    【讨论】:

    • 之后我在文件上调用 slurp。问题是,找不到该文件。开发时,它可以工作。
    • 不,错误显示“不是文件”。它没有说“找不到文件”。看到这个:clojuredocs.org/clojure.java.io/resource
    • 你是对的。我不得不直接在资源上啜饮。
    【解决方案2】:

    如果你想读取configuration.json文件的内容,不要调用io/file。而是使用slurp 函数,如下所示:

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

    【讨论】:

    • 之后我在文件上调用 slurp。问题是,找不到该文件。开发时,它可以工作。
    • 之后我可以写入这个配置文件吗?
    猜你喜欢
    • 2018-03-11
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 2011-01-03
    相关资源
    最近更新 更多