2017-11-12 16 views
2

clojure-projectで変更可能なファイルを使用したいと思います。 、私が試した...($エコーリソース/ TEMP.TXT =>こんにちは)Clojure:lein-uberjarでリソースを含める方法

(ns test.core 
    (:require [clojure.java.io :refer [writer input-stream]] 
      [clojure.java.io :as io]) 
    (:gen-class)) 

(str (io/resource "")) 
(defn -main 
    [] 
(with-open [r (input-stream (io/resource "temp.txt"))] 
    (loop [c (.read r)] 
     (if (not= c -1) 
     (do 
      (print (char c)) 
      (recur (.read r)))))) 
    (with-open [r (writer (.getFile (io/resource "temp.txt")))] 
    (.write r "See you!")) 
) 

ので

(Manjaro Linuxの& Leiningenをは、Javaに1.8.0_144 OpenJDKの64ビットサーバーVMを2.8.0)そしてproject.cljはここにある...

(defproject test "0.1.0-SNAPSHOT" 
    :description "FIXME: write description" 
    :url "http://example.com/FIXME" 
    :license {:name "Eclipse Public License" 
      :url "http://www.eclipse.org/legal/epl-v10.html"} 
    :dependencies [[org.clojure/clojure "1.8.0"]] 
    :main test.core) 

このプログラムは、レイン・ランで

$ lein run 
Hello 
$ 

しかし、このキャンを実行することができますレイン-uberjarにおけるOTの実行 - >私はそれへの正しいパスを取得するにはどうすればよいのjava -jarテスト-0.1.0-SNAPSHOT-standalone.jar

$ lein uberjar 
$ java -jar test-0.1.0-SNAPSHOT-standalone.jar 
Exception in thread "main" java.io.FileNotFoundException: /home/***/Documents/test/target/test-0.1.0-SNAPSHOT-standalone.jar!/temp.txt (
No such file or directory) 
at java.io.FileOutputStream.open0(Native Method) 
at java.io.FileOutputStream.open(FileOutputStream.java:270) 
at java.io.FileOutputStream.<init>(FileOutputStream.java:213) 
at clojure.java.io$fn__9522.invokeStatic(io.clj:230) 
at clojure.java.io$fn__9522.invoke(io.clj:230) 
at clojure.java.io$fn__9459$G__9428__9466.invoke(io.clj:69) 
at clojure.java.io$fn__9526.invokeStatic(io.clj:242) 
at clojure.java.io$fn__9526.invoke(io.clj:240) 
at clojure.java.io$fn__9459$G__9428__9466.invoke(io.clj:69) 
at clojure.java.io$fn__9534.invokeStatic(io.clj:261) 
at clojure.java.io$fn__9534.invoke(io.clj:259) 
at clojure.java.io$fn__9459$G__9428__9466.invoke(io.clj:69) 
at clojure.java.io$fn__9496.invokeStatic(io.clj:166) 
at clojure.java.io$fn__9496.invoke(io.clj:166) 
at clojure.java.io$fn__9472$G__9424__9479.invoke(io.clj:69) 
at clojure.java.io$writer.invokeStatic(io.clj:119) 
at clojure.java.io$writer.doInvoke(io.clj:104) 
at clojure.lang.RestFn.invoke(RestFn.java:410) 
at test.core$_main.invokeStatic(core.clj:15) 
at test.core$_main.invoke(core.clj:7) 
at clojure.lang.AFn.applyToHelper(AFn.java:152) 
at clojure.lang.AFn.applyTo(AFn.java:144) 
at test.core.main(Unknown Source) 

? ありがとうございます。

+0

しかし、私はこのファイルを 'sudo jar -xvf * -standalone.jar temp.txt'で見つけることができました –

答えて

0

1つの問題は、ファイルシステムのディレクトリ構造ではなく、zipファイルから読み取っているため、.getFileがjarファイルで機能しないことです。 また、jarファイル内のファイルを変更することはお勧めしません(可能性は確信していません)。また、Reading a resource file from within jarを参照してください。

関連する問題