Run-> Runメニューを使用して、IntelliJ Javaから簡単なIDEプログラムを実行しています。正常に動作します。次に、log4jロギングを追加します。
プロジェクトルートの下にリソースフォルダーを追加しました。そのフォルダーにlog4j.propertiesファイルを追加しました。何かを記録するようにコードを変更しました。
プロパティファイルが表示されるようにクラスパスにリソースフォルダーを含めるようにIntelliJに指示する正しい方法は何ですか?
IntelliJ 8を使用すると、酔っ払った猿のように推測し、最終的には動作するようになりました。私は今9を持っています、そして、私は完全に失敗しています。私は1時間やってみました。 「クラスパスに追加」オプションはどうですか?/fume/vent/rant
これを試して:
実際には、少なくとも2つの方法があります。最初の方法はColinDによって説明されています。IDEAで「リソース」フォルダーを「ソース」フォルダーとして設定するだけです。 Resource Patternsにリソースの拡張子が含まれている場合、Makeを実行すると、出力ディレクトリにコピーされます。プロジェクトと出力ディレクトリは自動的にアプリケーションのクラスパスになります。
別の一般的な方法は、「リソース」フォルダーをクラスパスに直接追加することです。 プロジェクト構造|モジュール|モジュール|依存関係に移動し、追加、単一エントリモジュールライブラリをクリックして、「リソース」へのパスを指定しますフォルダ。
さらに別の解決策は、log4j.propertiesファイルをプロジェクトのソースルートの直下(デフォルトのパッケージディレクトリ)に配置することです。 Module Paths設定に別のSourceルートを追加する必要がないことを除いて、最初の方法と同じです。ファイルはMakeの出力ディレクトリにコピーされます。
異なるlog4j構成でテストする場合は、Run/Debug configuration、VM parametersファイルでカスタム構成ファイルを直接指定する方が簡単な場合があります。
-Dlog4j.configuration=file:/c:/log4j.properties
。
私には同じ問題があり、それは私を非常に困らせます!!
私は答え2としてやるべきだといつも思っていました。それはIntellij 9(現在は10を使用)で機能していました。
しかし、私はこれらの行を私のmaven pomファイルに追加することで役立つことを理解しました:
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
...
</build>
Intellij 13xでこれを行う方法を見つけるのにかなりの時間を費やしました。 Intellijの別の手順であるプロパティファイルを、それらを必要とするアーティファクトに追加したことはないようです。以下の設定は、複数のモジュールで共有されるプロパティファイルがある場合にも機能します。
.ini拡張子を持つファイルをクラスパスに追加する同様の課題に直面しました。 この答えを見つけました 、これは設定->コンパイラ->リソースパターン-> [...]; *。iniに追加します
ScalaとSBTで同じ問題が発生した場合:
プロジェクト構造に移動します。ショートカットは(CTRL + ALT + SHIFT + S)
左端のリストで、[プロジェクト設定]> [モジュール]を選択します。
その右側のモジュールリストで、プロジェクト名のモジュール(ビルドなし)を選択し、ソースタブを選択します。
中央で、プロジェクトのルートが/home/<username>/IdeaProjects/<projectName>
であるフォルダーを展開します
右側の[コンテンツルート]セクションを見てください。赤いパスは、まだ作成していないディレクトリです。プロパティファイルをResourcesディレクトリに配置します。そこでsrc/main/resources
を作成し、そこにlog4j.propertiesを入れました。 Content Rootを変更して、好きな場所に配置できると思います(私はこれをしませんでした)。
SBT構成でコードを実行すると、log4j.propertiesファイルが見つかりました。
EclipseからIntelliJに移行する人、または他の方法で移行する人は、プロパティファイルまたは他のリソースファイルを操作する際のヒントです。
気が狂います(見つけるのに一晩かかります)が、IDEからローカルで実行したり、デバッグ中にリソース/プロパティファイルを検索したりする場合、両方のIDEの動作はかなり異なります。 (.jarへのパッケージングもまったく異なりますが、文書化の方が適切です。)
コードに次のような相対パス参照があるとします。
new FileInputStream("xxxx.properties");
(JARと一緒にパッケージ化したくないenv固有の.propertiesファイルを使用する場合に便利です)
(私は13.1を使用していますが、より多くのバージョンで有効かもしれません)
ファイルxxxx.propertiesは、IntelliJでこのように実行時に取得されるために、プロジェクトROOTの親ディレクトリにある必要があります。 (プロジェクトROOTは/ srcフォルダーが存在する場所です)
Xxxx.propertiesファイルがプロジェクトROOT自体にある場合、Eclipseはちょうど幸せです。
したがって、IntelliJは、.propertiesファイルがこのように参照されている場合、Eclipseより1レベル高いことを期待します!!
これは、エクスポートされた.jarに同じコード行(new FileInputStream( "xxxx.properties");)がある場合のコードの実行方法にも影響します。アジャイルになりたい場合、.propertiesファイルをjarにパッケージ化したくない場合は、コマンドラインから.propertiesファイルを正しく参照するために、次のようにjarを実行する必要があります。
Java -cp "/path/to_properties_file/:/path/to_jar/some.jar" com.bla.blabla.ClassContainingMainMethod
Java -jar some.jar
eclipseでエクスポートされた実行可能jarは、参照された.propertiesファイルが.jarファイルがある場所と同じ場所にあることを期待するだけです。
たぶん、これは少し質問から外れており、質問がすでに回答されているように見えますが、私は同様の問題を経験しました。私の場合、コンパイル時に単体テストリソースのsomeのみが出力フォルダーにコピーされました。私のpersistence.xmlMETA-INFフォルダーにコピーされましたbut else else.
最後に、問題のあるファイルの名前を変更し、プロジェクトを再構築し、ファイル名を元の名前に戻すことで、問題を「解決」しました。なぜこれが機能したのか聞かないでください。私の最良の推測は、どういうわけか、私のIntelliJプロジェクトがファイルシステムと少し同期しなくなり、名前変更操作が何らかの内部「リソース再スキャン」をトリガーしたことです。
ユニットテストのlog4j.xmlファイルで同様の問題が発生しました。上記のすべてを実行しました。しかし、失敗したテストを再実行するだけだったためだとわかりました。..テストクラス全体を再実行すると、正しいファイルが選択されます。これはIntelli-j 9.0.4の下にあります
私は愚かな人だと知っているので、長い一日を過ごした後、この問題をデバッグするために多くの時間を費やし、上記のすべての応答を試しましたが、結局、それは私の多くの愚かな間違いの1つでした。
org.Apache.logging.log4j.Logger
(:fml :)を使用していましたが、org.Apache.log4j.Logger
を使用する必要がありました。この正しいロガーを使用すると、命が救われました。