2016-08-14 24 views
2

私はを学習しています。leiningenです。私はレインに & のjava -jarコマンドをテストするための簡単なコードを書かれています。ここに私のproject.cljファイルされる:java -jarで起動したときに印刷機能が印刷されないのはなぜですか?

$ 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!")) 

私はレインでこのコードを実行すると、それは正常に動作します。私はのjavaで必要な出力を取得していない理由は、私が -jar の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 

を動作しませんでしたここ

$ lein run 
Hello, World!$ 

を示しています-jar?両方レインランと

私は印刷ソースファイル内のprintlnと交換した場合、私は必要しまっ出力 & のjava -jar

答えて

4

プロセス出力がバッファされます。 printは出力をフラッシュしません。ほとんどの場合、出力ストリームは自動的に改行でフラッシュされるように設定されます。そのため、printlnが表示されます。改行なしでフラッシュする必要がある場合は、(flush)関数を呼び出すことができます。

+0

Cool!私は理解した。私は私の答えを得た。ありがとう。 @noisesmith –