Geleneksel Maven dizinlerini kullanırken log4j.properties dosyasını nereye koymalıyım?
Geleneksel Maven dizinlerini kullanırken log4j.properties dosyasını nereye koymalıyım?
Yanıtlar:
src/main/resources bunun için "standart yerleşim" dir.
Güncelleme: Yukarıdakiler soruyu yanıtlar, ancak bu en iyi çözüm değildir. Bu konudaki diğer cevaplara ve yorumlara bakın ... muhtemelen jar ile kendi günlük kaydı özelliklerinizi göndermezsiniz, bunun yerine istenen günlüğü yapılandırmak için istemciye (örneğin uygulama-sunucu, sahne ortamı vb.) Bırakırsınız. Bu yüzden onu koymak src/test/resourcesbenim tercih ettiğim çözümdür.
Not: Somut günlük yapılandırmasını istemciye / kullanıcıya bırakmaktan bahsetmişken, değiştirmeyi düşünmelisinizlog4jslf4j uygulamanızda ile .
resourcesve log4j.propertiescevapta belirtildiği klasörde.
src/main/resourcesvarsayılan olarak kopyalanacaktarget/classes
Sadece yerleştirmek onu src/main/resourcesyapının içine yerleştirir. Örneğin, yapınız bir JAR ise, log4j.propertiesgünlük kaydını yapılandırılabilir hale getirmenin başlangıç noktasını kaybederek dosyanın içinde olacaktır .
Genellikle onu yerleştiririm src/main/resourcesve şu şekilde hedefe çıkacak şekilde ayarlarım:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>log4j.properties</include>
</includes>
</resource>
</resources>
</build>
Ek olarak, log4j'nin gerçekten görmesi için, çıktı dizinini sınıf yoluna eklemeniz gerekir. Yapıtınız yürütülebilir bir JAR ise, onu oluşturmak için muhtemelen maven-assembly-eklentisini kullandınız. Bu eklentinin içinde, aşağıdaki Class-Pathgibi bir bildirim girişi ekleyerek JAR'ın geçerli klasörünü sınıf yoluna ekleyebilirsiniz :
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.your-package.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Artık log4j.properties dosyası JAR dosyanızın hemen yanında bağımsız olarak yapılandırılabilir olacaktır.
Eclipse doğrudan uygulamayı çalıştırmak için, eklemek resourceskoşunuz yapılandırmasında Sınıfyolu dizini: Run->Run Configurations...->Java Application->Newseçmek Classpathsekmesini seçin Advancedve gidin src/resourcesdizine.
${project.build.directory}yoksa projenin yerel sürücümde yaşadığı gerçek yola göre mi düzenlenmelidir?
Bazı "veri madenciliği" bunu açıklıyor src/main/resources tipik yer burasıdır.
Üzerinde Sonuçlar Google Code Search :
src/main/resources/log4j.properties: 4877src/main/java/log4j.properties: 215 resourcesdeğil resource.
resourcesadece bir yazım hatasıydı.
Projeyi başlatmak için kullanılan kaynaklar tercihen src / main / resources klasörüne yerleştirilir. Derleme sırasında bu kaynakların yüklenmesini etkinleştirmek için, bir derleme kaynağı olarak maven projesindeki pom.xml'ye girişler ekleyebilirsiniz.
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
Diğer .properties dosyaları da başlatma için kullanılan bu klasörde tutulabilir. Eğer kaynak dosyaları klasör özelliklerinde bazı değişkenler var ve olarak ayarlanır src / main / filtrelerinde tutulur profil filtreleri özellikleri dosyaları, onları doldurmak istiyorsanız Filtreleme gerçek ayarlanır profilleri ama tamamen farklı bir kullanım durumu . Şimdilik onları görmezden gelebilirsiniz.
Bu harika bir kaynak maven kaynak eklentisidir , kullanışlıdır, sadece diğer bölümlere de göz atın.
Kaynak dosyalarını başka bir konuma koymak, kullanabileceğiniz en iyi çözüm değildir:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
Örneğin, kaynak dosyaları (örn. Jaxb.properties), Java sınıflarıyla birlikte paketlerin derinliklerine girdiğinde.
Log4j.properties veya log4j.xml dosyanız src / main / resources altında bulunamazsa, bu PropertyConfigurator.configure ("log4j.xml") kullanın;
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);
Aşağıdaki kodu, pom.xml dosyanızdaki kaynak etiketlerinden derleme etiketlerinin içine ekleyin. bu, kaynak etiketlerinin pom.xml dosyanızdaki derleme etiketlerinin içinde olması gerektiği anlamına gelir
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<build/>