8

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 のルート フォルダーに配置されます。

4

2 に答える 2

12

clojure.java.io/resourceファイルではなく URL を返します。だからこそ、あなたはそれを呼び出すことができますslurp。エラー メッセージはファイルではないことを示していますが、残念ながら URL であることを示しているわけではありません。

もちろん、java.net.URL API を使用して URL を開くこともできますが、この場合はやり過ぎです。

于 2015-08-26T22:30:22.093 に答える