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/resources
benim 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üşünmelisinizlog4j
slf4j
uygulamanızda ile .
resources
ve log4j.properties
cevapta belirtildiği klasörde.
src/main/resources
varsayılan olarak kopyalanacaktarget/classes
Sadece yerleştirmek onu src/main/resources
yapının içine yerleştirir. Örneğin, yapınız bir JAR ise, log4j.properties
gü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/resources
ve ş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-Path
gibi 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 resources
koşunuz yapılandırmasında Sınıfyolu dizini: Run->Run Configurations...->Java Application->New
seçmek Classpath
sekmesini seçin Advanced
ve gidin src/resources
dizine.
${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 resources
değil resource
.
resource
sadece 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/>