2012-11-01 41 views
30

Java ve gradle ile bir konsol uygulaması yazıyorum. application plugin kullanıyorum ve build.gradle içinde doğru yapılandırılmış gerekli alanlara sahip.Java ve gradle ile konsol uygulaması

Ana sınıfımda System.in ile bağlantılı BufferedReader var. Sorun şu: Proje dizininde gradle run çalıştırdığımda, okuyucu konsol girişimi beklemiyor. BufferedReader#readLine, ilk çağrıda null değerini döndürür. Bu davranış ne yaptığım için arzu edilmez.

Çözüm nedir? Gradle için ayrı bir konsol uygulaması eklentisi var mı veya ihtiyaçlarım için bir şekilde application eklentisini değiştirmem gerekiyor mu?

+0

4 yıl sonra! Bir Windows işletim sistemi çalıştırıyorsanız, bir Cygwin terminalinden görevi yürüterek bu can sıkıcı "> Bina ..." öğelerinin görünmediğini fark ettim. Ama ben de 'standartInput = System.in 'koymanın sadece' run 'içinde değil, özel olarak tanımlanmış bir' görev' içine koyarsam, sadece benim için çalıştığımı da buldum. –

cevap

54

Varsayılan olarak, gradle yapınızın system.in öğesi, run (JavaExec) görevinin system.in öğesiyle bağlı değil. Yukarıda belirtildiği gibi

run{ 
    standardInput = System.in 
} 
+2

Teşekkürler! Bu çok yardımcı oldu. Şimdi bir sonraki giriş için kullanıcı istediğinde '> Bina>: çalıştır '' yazdırmaktan kaçınmanın bir yolu var mı? – missingfaktor

+3

maalesef şu anda değil. Bir süre önce bunun için bir konu açtım: http://issues.gradle.org/browse/GRADLE-1147 bunun için oy verebilirsiniz. –

+0

Tekrar teşekkürler. Bu da yapacak. Cevabınızı kabul ediyorum. :) – missingfaktor

-3

Muhtemelen, sorun, java kodunuzda yatar. Tüm uygulama eklentisi java kodunu derler ve belirttiğiniz ana sınıfı çalıştırır. Kodu, ana sınıfınızda uygulama eklentisi için belirttiğiniz (mainClassName) olarak kaydeder misiniz?

+0

Kodu, IntelliJ IDEA'nın içinden de çalıştırdım. (Dosyayı sağ tıklayıp 'Çalıştır'ı tıklatarak' .main''i seçin.) Sadece iyi çalışıyor. – missingfaktor

İlgili konular