従来のMavenディレクトリを使用する場合、log4j.propertiesファイルはどこに置くべきですか?
src/main/resources
は、このための「標準配置」です。
更新:上記は質問に答えますが、最良の解決策ではありません。これに関する他の回答とコメントを確認してください...おそらく、独自のロギングプロパティをjarに同梱せず、代わりにクライアント(アプリサーバー、ステージ環境など)に残して、必要なロギングを設定します。したがって、src/test/resources
に配置することをお勧めします。
注:具体的なログ設定をクライアント/ユーザーに任せると言えば、アプリでlog4j
をslf4j
に置き換えることを検討する必要があります。
src/main/resources
に置くだけで、アーティファクト内にバンドルされます。例えば。アーティファクトがJARの場合、log4j.properties
ファイルが内部にあり、ロギングを構成可能にするという最初のポイントが失われます。
通常はsrc/main/resources
に配置し、ターゲットに出力するように設定します。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>log4j.properties</include>
</includes>
</resource>
</resources>
</build>
また、log4jで実際に表示するには、出力ディレクトリをクラスパスに追加する必要があります。アーティファクトが実行可能JARである場合、おそらくmaven-Assembly-pluginを使用して作成しました。そのプラグイン内で、次のようなClass-Path
マニフェストエントリを追加することにより、JARの現在のフォルダーをクラスパスに追加できます。
<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>
これで、log4j.propertiesファイルはJARファイルのすぐ横にあり、個別に設定可能になります。
アプリケーションをEclipseから直接実行するには、実行構成のクラスパスにresources
ディレクトリを追加します。Run->Run Configurations...->Java Application->New
Classpath
タブを選択し、Advanced
を選択してsrc/resources
ディレクトリ。
そのためのいくつかの「データマイニング」アカウントsrc/main/resources
は、典型的な場所です。
Google Code Search :の結果
src/main/resources/log4j.properties
:4877src/main/Java/log4j.properties
:215プロジェクトの初期化に使用されるリソースは、src/main/resourcesフォルダーに配置するのが望ましいです。ビルド中にこれらのリソースの読み込みを有効にするには、mavenプロジェクトのpom.xmlにビルドリソースとしてエントリを追加するだけです。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
他の.propertiesファイルも、初期化に使用されるこのフォルダーに保存できます。リソースフォルダーのプロパティファイルにいくつかの変数を持ち、として設定されているsrc/main/filtersに保持されているプロファイルフィルタープロパティファイルからそれらを取り込む場合、フィルタリングはtrueに設定されます。 profilesしかし、それはまったく異なるユースケースです。今のところ、それらは無視できます。
これは優れたリソースです maven resource plugins .
リソースファイルを別の場所に配置することは、使用できる最善のソリューションではありません。
<build>
<resources>
<resource>
<directory>src/main/Java</directory>
<excludes>
<exclude>**/*.Java</exclude>
</excludes>
</resource>
</resources>
<build>
たとえば、リソースファイル(jaxb.propertiesなど)がJavaクラスとともにパッケージの奥深くに移動する場合。
Src/main/resourcesの下にlog4j.propertiesまたはlog4j.xmlファイルが見つからない場合は、このPropertyConfigurator.configure( "log4j.xml")を使用します。
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);