2016-08-14 87 views
2

我在學clojureleiningen。我寫了一個簡單的代碼來測試雷音 & Java的罐子命令。這裏是我的project.clj文件:爲什麼使用java -jar調用print函數時不打印?

$ cat project.clj 
(defproject hello "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 ^:skip-aot hello.core 
    :target-path "target/%s" 
    :profiles {:uberjar {:aot :all}}) 

這裏是我的源代碼:

$ cat src/hello/core.clj 
(ns hello.core 
    (:gen-class)) 

(defn -main 
    [& args] 
    (print "Hello, World!")) 

當我運行此代碼雷音,它做工精細。它在這裏

$ lein run 
Hello, World!$ 

所示。當我試圖運行Java的罐子,它沒有工作

$ lein uberjar 
Compiling hello.core 
Created /home/rishi/hello/target/uberjar/hello-0.1.0-SNAPSHOT.jar 
Created /home/rishi/hello/target/uberjar/hello-0.1.0-SNAPSHOT-standalone.jar 

$ java -jar target/uberjar/hello-0.1.0-SNAPSHOT-standalone.jar 

我不明白,爲什麼我沒有得到所需的輸出與的java -jar

如果我更換打印的println在源文件中,我得到了所需的輸出與兩個雷音運行 & Java的罐子

回答

4

您的過程輸出被緩衝。 print不會刷新輸出。大多數情況下,輸出流將設置爲自動刷新換行符,這就是顯示println的原因。如果您需要刷新而不換行,則可以調用(flush)函數。

+0

酷!我明白了。我得到了我的答案。謝謝。 @noisesmith –

相關問題