IntelliJ'in sınıf yoluna bir özellikler dosyası ekleyin


122

Çalıştır-> Çalıştır menüsünü kullanarak IntelliJ IDE'den basit bir Java programı çalıştırıyorum. İyi çalışıyor. Şimdi log4j günlük kaydı eklemek istiyorum.

Proje kökümün altına bir kaynaklar klasörü ekledim. Bu klasöre bir log4j.properties dosyası ekledim. Bir şeyi kaydetmek için kodu değiştirdim.

IntelliJ'e, özellikler dosyasının görülmesi için kaynaklar klasörünü sınıf yoluna dahil etmesini söylemenin doğru yolu nedir?

IntelliJ 8 ile sarhoş bir maymun gibi tahmin edebilir ve sonunda onu çalıştırabilirdim. Şimdi 9'um var ve tamamen başarısızım. Bir saattir deniyorum. Bir yerde "Sınıf yoluna ekle" seçeneğine ne dersiniz? / fume / vent / rant


Tamam, durum çözüldü. Bu IntelliJ'in yeni bir yüklemesidir - log4J varsayılan olarak dahil DEĞİLDİR. Kodumda log4j'yi değil, stok kaydediciyi içe aktarmıştım. Stok kaydedici benzer yöntemleri desteklediğinden, yanlış kaydediciyi kullandığım belli değildi! Log4j özellikler dosyasını okumamasının veya log4j'yi yapılandırmak için ihtiyacım olduğunu bildirmesinin neden şaşırtıcı değil. Dişlere ne tekme!
Tony Ennis

Yanıtlar:


91

Bunu dene:

  • Proje Yapısına gidin.
  • Modülünüzü seçin.
  • Sağdaki ağaçta klasörü bulun ve seçin.
  • Bu klasörü bir kaynak klasörü yapmak için o ağacın (mavi klasörle birlikte) üzerindeki Kaynaklar düğmesini tıklayın.

Bunu yaklaşık 50 kez yaptım, yine yaptım. Düzen dönüştürme modelini aşikar olan bir şeye değiştirmeme rağmen çıktım değişmiyor. Sınıf yolumda başka bir log4j.özelliği olup olmadığını merak ediyorum.
Tony Ennis

29
Derleyici ayarlarında Kaynak modellerini kontrol edin. "? *. Özelliklerinin" orada olup olmadığını kontrol edin. Varsayılan olarak oradadır, ancak aklıma gelen tek şey bu.
ColinD

3
Kaynaklar düğmesine alternatif - oluşturduğunuz Dizini sağ tıklayın ve "Dizini
Farklı

10
Projenizi geçici bir kaynak yapısı yerine bir Maven POM'dan oluşturduysanız, bu çözümün çalışmayacağını unutmayın. Bunun yerine, bu dizini POM'a kaynak olarak eklemeniz gerekir. Peter Thygesen'in cevabına bakın.
lreeder

PropertyConfigurator.configure ("../ conf / log4j.properties") aracılığıyla programatik olarak da yapılabilir
Jason D

47

Aslında bunu yapmanın en az 2 yolu var, ilk yol ColinD tarafından anlatılıyor, sadece "kaynaklar" klasörünü IDEA'da Kaynaklar klasörü olarak yapılandırmanız yeterli. Eğer kaynak Desenler senin kaynağın uzantısını içeren ne zaman, o zaman çıkış dizinine kopyalanacaktır olun projeyi ve çıkış dizin otomatik uygulamanın bir sınıf yolu olduğunu.

Diğer bir yaygın yol, "kaynaklar" klasörünü doğrudan sınıf yoluna eklemektir. Proje Yapısına Git | Modüller | Modülünüz | Bağımlılıklar , Ekle , Tek Girişli Modül Kitaplığı'na tıklayın , "kaynaklar" klasörüne giden yolu belirtin.

Yine başka bir çözüm, log4j.properties dosyasını doğrudan projenizin Kaynak kökünün altına (varsayılan paket dizininde) koymak olacaktır . Modül Yolları ayarlarında başka bir Kaynak kökü eklemeniz gerekmemesi dışında ilk yöntemle aynıdır , dosya Make'deki çıktı dizinine kopyalanacaktır.

Farklı log4j yapılandırmalarıyla test etmek istiyorsanız, doğrudan Çalıştır / Hata Ayıklama yapılandırmasında özel bir yapılandırma dosyası belirtmek daha kolay olabilir , VM parametreleri dosyalanır:

-Dlog4j.configuration=file:/c:/log4j.properties.


2. ve 3. paragraflarınızı etkisiz hale getirdim. Eminim önerilerin işe yaramasından ötürü hiçbir etkisi yoktur - sınıf yolunda başka bir log4j.properties dosyası varmış gibi davranır. Ama hiçbir yerde göremiyorum. Log4j özellikler dosyamı tamamen kaldırırsam, konsolda "log4j'yi yapılandırmanız gerekir" uyarısını almıyorum. Ücretsiz IntelliJ'i (ve 9.x sürümünü) ilk kez kullanıyorum, bu yüzden belki bununla bir ilgisi olabilir.
Tony Ennis

1
Açık -D VM parametresini kullanmanın da hiçbir etkisi olmadı. Bu noktada, sadece 'aptal ağacın' tepesinden düştüğümü ve aşağıya inerken her dalı vurduğumu tahmin edebilirim! Sanırım JetBrains'te trol yapacağım ve etrafta soracağım ...
Tony Ennis

Sorunu yeniden oluşturmak için örnek projeyi tam adımlarla support@jetbrains.com adresine gönderebilir misiniz?
CrazyCoder

Program argümanlarında -Dlog4j.configuration = dosya: / c: /log4j.properties yazıyordum. VM parametreleri benim için hile yaptı.
Ajak6

42

Bende de aynı sorun var ve bu beni çok sinirlendiriyor !!

Her zaman cevap 2 olarak yapmam gerektiğini düşünmüşümdür. Eskiden Intellij 9'da çalışıyordu (şimdi 10 kullanıyor).

Bununla birlikte, bu satırı maven pom dosyama eklemenin yardımcı olduğunu anladım:

<build>
  ...
  <resources>
    <resource>
      <directory>src/main/resources</directory>
    </resource>
  </resources>
  ...
</build>

Bu tam olarak yaşadığım problemdi, şimdi kaynak dosyaları çıktı klasörüne başarıyla kopyalanıyor.
artjomka

Bu cevap gerçekten işe yarıyor. ColinD'in yorumlarında önerdiği şeyi ben de yaptım. Teşekkür ederim.

Teşekkür ederim, benim için işe yarayan tek çözüm bu.
Minh Thiện

18

Intellij 13x'te bunu nasıl yapacağımı bulmak için epey zaman harcadım. Görünüşe göre özellikler dosyalarını onları gerektiren yapılara hiç eklemedim, bu da Intellij'de ayrı bir adım. Aşağıdaki kurulum, birden çok modül tarafından paylaşılan bir özellikler dosyanız olduğunda da çalışır.

  • Proje kurulumunuza gidin (CTRL + ALT + SHIFT + S)
  • Listeden, bir veya daha fazla özellik dosyası eklemek istediğiniz modülü seçin.
  • Sağda Bağımlılıklar sekmesini seçin.
  • Yeşil artıya tıklayın ve "Kavanozlar veya dizinler" i seçin.
  • Şimdi özellik dosyalarını içeren klasörü seçin. (Tek bir dosya eklemeyi denemedim)
  • Intellij şimdi size seçilen dosyanın "kategorisinin" ne olduğunu soracaktır. "Sınıflar" ı seçin (olmasalar bile).
  • Şimdi yapıya özellikler dosyalarını eklemelisiniz. Intellij size aşağıda gösterilen kısayolu verecektir. Alt kısımdaki kırmızı kısımda hataları ve tıklandığında dosyaları yapıya ekleme seçeneğini gösteren bir 'kırmızı ampul' gösterecektir. Ayrıca 'eserler' bölümüne gidebilir ve dosyaları yapılara manuel olarak ekleyebilirsiniz.

görüntü açıklamasını buraya girin


14

Sınıf yoluna .ini uzantılı dosyalar eklerken benzer bir sorunla karşılaştı. Tercihler -> Derleyici -> Kaynak Kalıpları -> [...]; *. İni'ye eklemek için bu yanıtı buldum


1
.conf dosyalarında yaşadığım tam sorun buydu
James

Kodumun nesi var diye düşündüm. Bu çözüm için teşekkürler
Shoaib Chikate

5

Scala ve SBT ile aynı problemle karşılaşırsanız:

  • Proje Yapısına gidin. Kısayol (CTRL + ALT + SHIFT + S)

  • En soldaki listede Proje Ayarları> Modüller'i seçin.

  • Bunun sağındaki modül listesinde, proje adınızın modülünü seçin (yapı olmadan) ve kaynaklar sekmesini seçin

  • Ortada, benim için projenizin kökü olan klasörü genişletin. /home/<username>/IdeaProjects/<projectName>

  • Sağ taraftaki İçerik Kökü bölümüne bakın, kırmızı yollar sizin yapmadığınız dizinlerdir. Özellikler dosyasını bir Kaynaklar dizinine koymak isteyeceksiniz. Bu yüzden src/main/resourceslog4j.properties'i yarattım ve içine koydum. İstediğiniz yere yerleştirmek için İçerik Kökü'nü de değiştirebileceğinize inanıyorum (bunu ben yapmadım).

  • Kodumu bir SBT yapılandırmasıyla çalıştırdım ve log4j.properties dosyamı buldu.

görüntü açıklamasını buraya girin


2

Eclipse'den IntelliJ'e geçiş yapanlarınız için ya da tam tersi, özellik dosyaları ya da diğer kaynak dosyalarıyla çalışırken bir ipucu.

Çıldırtıcı (öğrenmek için bütün bir geceme mal oldu) ancak IDE'nizden yerel olarak çalıştırmak istediğinizde veya hata ayıklama sırasında kaynak / uygun dosyalar ararken her iki IDE de oldukça farklı çalışıyor. (Bir .jar'a paketleme de oldukça farklıdır, ancak bu daha iyi belgelenmiştir.)

Kodunuzda buna benzer bir göreceli yol yönlendirmeniz olduğunu varsayalım:

new FileInputStream("xxxx.properties");

(JAR'ınızla birlikte paketlemek istemediğiniz env'e özgü .properties dosyalarıyla çalışıyorsanız bu uygundur)

IntelliJ

(13.1 kullanıyorum, ancak daha fazla sürüm için geçerli olabilir)

Xxxx.properties dosyasının IntelliJ'de olduğu gibi çalışma zamanında alınabilmesi için ROOT projesinin PARENT dizininde olması gerekir. (ROOT projesi, / src klasörünün bulunduğu yerdir)

ECLIPSE

Eclipse, xxxx.properties dosyası ROOT projesinin kendisinde olduğunda mutludur.

Dolayısıyla IntelliJ, bu şekilde başvurulduğunda .properties dosyasının Eclipse'den 1 düzey daha yüksek olmasını bekler !!

Bu aynı zamanda, dışa aktardığınız .jar'da aynı kod satırına (yeni FileInputStream ("xxxx.properties");) sahip olduğunuzda kodunuzu yürütme şeklinizi de etkiler. Çevik olmak istediğinizde ve .properties dosyasını jar'ınızla paketlemek istemediğinizde, .properties dosyasına komut satırından doğru şekilde başvurmak için jar'ı aşağıdaki gibi çalıştırmanız gerekir:

INTELLIJ İHRACAT KAVANOZ

java -cp "/path/to_properties_file/:/path/to_jar/some.jar" com.bla.blabla.ClassContainingMainMethod

ECLIPSE İHRACAT KAVANOZ

java -jar some.jar

Eclipse dışa aktarılan yürütülebilir jar, referans verilen .properties dosyasının .jar dosyasının bulunduğu konumla aynı konumda olmasını bekleyecektir.


Evet, log4j2.xml veya log4j.properties'den farklı olarak logging.properties, IntelliJ modül kökünde bulunmalıdır. Ayrıca, sadece çalışan Log4j'den farklı olarak, IntelliJ içinde çalışmak için hala jüri teçhizatı kullanmam gerektiğini fark ettim (Eclipse aynı hikaye olurdu, bu Java günlüğünün hatasıdır), bkz. Stackoverflow.com/questions/960099/… . Bir alternatif, çalıştırma / hata ayıklama yapılandırmasını -Djava.util.logging.config.file = ile düzeltmek olabilir; bunu, kodda veya beklenen özellik dosyasında yapılandırmayı tercih ettiğim için oldukça uygunsuz buluyorum.
Russ Bateman

1

Belki de bu biraz konu dışı, soru zaten yanıtlanmış gibi görünüyor, ancak benzer bir sorunla karşılaştım. Benim durumumda , derleme sonrasında yalnızca bazı birim test kaynakları çıktı klasörüne kopyalandı. Benim persistence.xml içinde META-INF klasörüne kopyalanan var başka bir şey .

Sonunda sorunlu dosyaları yeniden adlandırarak, projeyi yeniden oluşturarak ve ardından dosya adlarını orijinal adlarla değiştirerek sorunu "çözdüm". Bunun neden işe yaradığını bana sorma ama işe yaradı. En iyi tahminim, bir şekilde IntelliJ projemin dosya sistemiyle biraz uyumsuz olması ve yeniden adlandırma işleminin bir tür dahili "kaynak yeniden taramayı" tetiklemesi.


1

Bu yaptığım aptalca hatalardan biri. Bu sorunu çözmeye çalışmak için çok zaman harcadım ve yukarıda yayınlanan tüm yanıtları denedim, ama sonunda, aptalca hatalarımdan biriydi.

I kullanılarak edildi org.apache.logging.log4j.Logger(: FML :) kullandığım gerekir ise org.apache.log4j.Logger. Bu doğru kaydediciyi kullanmak akşamımı kurtardı.


0

Bir birim testi için log4j.xml dosyasında benzer bir sorun yaşadım, yukarıdakilerin hepsini yaptım. Ancak bunun yalnızca başarısız bir testi yeniden çalıştırmamdan kaynaklandığını anladım .... Tüm test sınıfını yeniden çalıştırırsam doğru dosya alınır. Bu Intelli-j 9.0.4'ün altındadır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.