web-dev-qa-db-ja.com

Mavenを使用する場合、通常はJavaまたはリソースの下にlog4j.propertiesを配置しますか?

従来のMavenディレクトリを使用する場合、log4j.propertiesファイルはどこに置くべきですか?

120
user496949

src/main/resourcesは、このための「標準配置」です。

更新:上記は質問に答えますが、最良の解決策ではありません。これに関する他の回答とコメントを確認してください...おそらく、独自のロギングプロパティをjarに同梱せず、代わりにクライアント(アプリサーバー、ステージ環境など)に残して、必要なロギングを設定します。したがって、src/test/resourcesに配置することをお勧めします。

注:具体的なログ設定をクライアント/ユーザーに任せると言えば、アプリでlog4jslf4jに置き換えることを検討する必要があります。

133
Jan Galinski

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->NewClasspathタブを選択し、Advancedを選択してsrc/resourcesディレクトリ。

59
Zoltán

そのためのいくつかの「データマイニング」アカウントsrc/main/resourcesは、典型的な場所です。

Google Code Search :の結果

  • src/main/resources/log4j.properties:4877
  • src/main/Java/log4j.properties:215
25
splash

プロジェクトの初期化に使用されるリソースは、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 .

9
devastator

リソースファイルを別の場所に配置することは、使用できる最善のソリューションではありません。

<build>
  <resources>
    <resource>
      <directory>src/main/Java</directory>
      <excludes>
        <exclude>**/*.Java</exclude>
      </excludes>
    </resource>
  </resources>
<build>

たとえば、リソースファイル(jaxb.propertiesなど)がJavaクラスとともにパッケージの奥深くに移動する場合。

5
Ali Shakiba

Src/main/resourcesの下にlog4j.propertiesまたはlog4j.xmlファイルが見つからない場合は、このPropertyConfigurator.configure( "log4j.xml")を使用します。

   PropertyConfigurator.configure("log4j.xml");
   Logger logger = LoggerFactory.getLogger(MyClass.class);
   logger.error(message);
1
ethemsulan