2017-11-12 2 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!")) 
) 

그래서

(만자로 리눅스 & Leiningen 자바에 1.8.0_144 오픈 JDK 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 - 실행에서 실행할 수있는이 프로그램

$ lein run 
Hello 
$ 

하지만이 CANN ... 여기에 lein-uberjar에서 OT 실행 - 테스트-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) 

가 어떻게 그것을 올바른 경로를받을 수 있나요 -jar> 자바? 감사합니다.

+0

하지만 jar 파일에서 sudo jar -xvf * -standalone.jar temp.txt로 파일을 찾을 수있었습니다. –

답변

0

하나의 문제는 파일 시스템의 디렉토리 구조가 아니라 zip 파일에서 읽음으로써 jar 파일에서 .getFile이 작동하지 않는다는 것입니다. 또한 jar 파일 내부의 파일을 변경하지 않는 것이 좋습니다 (가능하지는 않습니다). 또한 Reading a resource file from within jar을 참조하십시오.

관련 문제