IntelliJのクラスパスにプロパティファイルを追加する


122

実行->実行メニューを使用して、IntelliJ IDEから単純なJavaプログラムを実行しています。正常に動作します。ここで、log4jロギングを追加します。

プロジェクトルートの下にリソースフォルダーを追加しました。そのフォルダーにlog4j.propertiesファイルを追加しました。何かをログに記録するようにコードを変更しました。

プロパティファイルが表示されるようにクラスパスにリソースフォルダーを含めるようIntelliJに指示する正しい方法は何ですか?

IntelliJ 8を使用すると、酔った猿のように推測し、最終的にはそれを機能させることができます。私は今9を持っており、私は完全に失敗しています。私は一時間頑張ってきました。どこかに「クラスパスに追加」オプションはどうですか?/ fume / vent / rant


はい、状況は解決しました。これはIntelliJの新規インストールです-log4Jはデフォルトでは含まれていません。私のコードでは、log4jではなく、ストックロガーをインポートしました。ストックロガーは同様の方法をサポートしているため、間違ったロガーを使用していたことは明らかではありませんでした。log4jプロパティファイルを読み取ったり、log4jを構成する必要があると報告したりしなかったのは当然のことです。なんて歯がキック!
Tony Ennis

回答:


91

これを試して:

  • プロジェクト構造に移動します。
  • モジュールを選択します。
  • 右側のツリーでフォルダを見つけて選択します。
  • そのツリー(青いフォルダー)の上にある[ソース]ボタンをクリックして、そのフォルダーをソースフォルダーにします。

私はそれを約50回行いましたが、もう一度やりました。レイアウト変換パターンを自明なものに変更しても、出力は変わりません。別のlog4j.propertiesがクラスパスにあるかどうか疑問に思っています。
Tony Ennis、

29
コンパイラ設定でリソースパターンを確認します。「?*。properties」がそこにあることを確認してください。それはデフォルトでそこにありますが、それは私が頭の上から考えることができる他の唯一のものです。
ColinD 2010

3
Sourcesボタンの代わりに-作成したディレクトリを右クリックして、[Mark Directory As]を選択します。「Source Root」
mschr

10
アドホックソース構造ではなく、Maven POMからプロジェクトを作成した場合、このソリューションは機能しないことに注意してください。代わりに、そのディレクトリをリソースとしてPOMに追加する必要があります。Peter Thygesenの回答を参照してください。
lreeder 2013

PropertyConfigurator.configure( "../ conf / log4j.properties")を介してプログラムで実行することもできます
Jason D

47

実際には、少なくとも2つの方法があります。最初の方法はColinDによって記述され、IDEAで "resources"フォルダをSourcesフォルダとして構成するだけです。場合は、リソースパターンは、あなたのリソースの拡張が含まれているあなたがするとき、それは、出力ディレクトリにコピーされます作成したプロジェクトと出力ディレクトリが自動的にアプリケーションのクラスパスです。

もう1つの一般的な方法は、「resources」フォルダーをクラスパスに直接追加することです。プロジェクト構造に移動| モジュール| モジュール| 依存関係は、クリック追加シングル入力モジュールライブラリを、「リソース」フォルダへのパスを指定します。

さらに別の解決策は、プロジェクトのソースルート(デフォルトのパッケージディレクトリ)の直下にlog4j.propertiesファイルを配置することです。モジュールパス設定で別のソースルートを追加する必要がないことを除いて、最初の方法と同じです。ファイルはMakeの出力ディレクトリにコピーされます。

別のlog4j構成でテストしたい場合は、それが直接カスタム構成ファイルを指定する方が簡単かもしれ実行/デバッグの設定VMパラメータが似提出しました:

-Dlog4j.configuration=file:/c:/log4j.properties


私はあなたのパラグラフ2と3を無効にしました。提案が機能するのは、効果がないことだけです。クラスパスに別のlog4j.propertiesファイルがあるように動作します。しかし、私はそれをどこにも見ることができません。log4jプロパティファイルを完全に削除すると、コンソールに「log4jを設定する必要があります」という警告が表示されません。私は無料のIntelliJ(およびバージョン9.x)を初めて使用しているので、おそらくそれと関係があります。
Tony Ennis

1
明示的な-D VMパラメータを使用しても効果はありませんでした。この時点で、私は「愚かな木」の頂上から落ちて、すべての枝を下に向かっていると推測することができます!私はJetBrainsでトロールして周りを尋ねると思います...
Tony Ennis

問題を再現するための正確な手順を含むサンプルプロジェクトをsupport@jetbrains.comに送信していただけませんか。
CrazyCoder

プログラムの引数に-Dlog4j.configuration = file:/ c:/log4j.propertiesを渡していました。VMパラメータは私にとってはトリックでした。
Ajak6 2016年

42

私は同じ問題を抱えており、私をものすごく悩ませています!!

私はいつも答え2としてやらざるを得ないと思っていました。これは以前はIntellij 9(現在は10を使用)で機能していました。

しかし、私はこれらの行を私のmaven pomファイルに追加すると、次のことが役立つことを理解しました:

<build>
  ...
  <resources>
    <resource>
      <directory>src/main/resources</directory>
    </resource>
  </resources>
  ...
</build>

これはまさに私が抱えていた問題でしたが、リソースファイルは出力フォルダーに正常にコピーされます。
artjomka 2013年

この答えは本当にうまくいきます。colinDが彼のコメントで提案したことも行いました。ありがとうございました。

ありがとう、これが私にとってうまくいった唯一の解決策です。
MinhThiện2018年

18

Intellij 13xでこれを行う方法を理解するのに私はかなりの時間を費やしました。プロパティファイルを必要とするアーティファクトに追加したことはないようです。これはIntellijの個別のステップです。以下の設定は、複数のモジュールで共有されるプロパティファイルがある場合にも機能します。

  • プロジェクト設定に移動します(CTRL + ALT + SHIFT + S)
  • リストで、1つ以上のプロパティファイルを追加するモジュールを選択します。
  • 右側で、[依存関係]タブを選択します。
  • 緑のプラス記号をクリックし、「Jarsまたはディレクトリ」を選択します。
  • 次に、プロパティファイルを含むフォルダーを選択します。(個別のファイルを含めて試したことはありません)
  • Intellijは、選択したファイルの「カテゴリ」を尋ねます。「クラス」を選択します(そうでない場合でも)。
  • 次に、プロパティファイルをアーティファクトに追加する必要があります。Intellijは、以下に示すショートカットを提供します。下部の赤い部分にエラーが表示され、クリックするとアーティファクトにファイルを追加するオプションを示す「赤い電球」が表示されます。「アーティファクト」セクションに移動して、ファイルをアーティファクトに手動で追加することもできます。

ここに画像の説明を入力してください


14

クラスパスに.ini拡張子を持つファイルを追加する同様の課題に直面しました。 この回答が見つかりました。これは、[設定]-> [コンパイラ]-> [リソースパターン]-> [...]に追加することです。*。ini


1
これが私が.confファイルで抱えていた正確な問題でした
James

私は自分のコードで何が間違っているのかと思いましたか?このソリューションをありがとう
Shoaib Chikate

5

ScalaとSBTで同じ問題が発生する場合:

  • プロジェクト構造に移動します。ショートカットは(CTRL + ALT + SHIFT + S)です。

  • 左端のリストで、[プロジェクト設定]> [モジュール]を選択します

  • その右側のモジュールリストで、プロジェクト名(ビルドなし)のモジュールを選択し、[ソース]タブを選択します

  • 中央で、プロジェクトのルートであるフォルダを展開します /home/<username>/IdeaProjects/<projectName>

  • 右側の[コンテンツルート]セクションを見てください。赤いパスは、まだ作成していないディレクトリです。プロパティファイルをResourcesディレクトリに配置する必要があります。そのsrc/main/resourcesため、log4j.properties を作成してそこに配置しました。コンテンツルートを変更して、好きな場所に配置できると思います(私はこれをしませんでした)。

  • SBT構成を使用してコードを実行したところ、log4j.propertiesファイルが見つかりました。

ここに画像の説明を入力してください


2

EclipseからIntelliJに、またはその逆に移行する場合は、プロパティファイルやその他のリソースファイルを操作する際のヒントを参考にしてください。

厄介なことです(調べるのに一晩かかります)が、IDEからローカルで実行する場合やデバッグ中にリソース/プロパティファイルを検索する場合、両方のIDEの動作はまったく異なります。(.jarへのパッケージ化もまったく異なりますが、ドキュメント化されています)。

コードに次のような相対パス参照があるとします。

new FileInputStream("xxxx.properties");

(JARと一緒にパッケージ化したくない環境固有の.propertiesファイルを操作する場合に便利です)

INTELLIJ

(私は13.1を使用していますが、より多くのバージョンで有効になる可能性があります)

IntelliJでこのように実行時にピックアップするには、ファイルxxxx.propertiesがプロジェクトROOTのPARENTディレクトリにある必要があります。(プロジェクトROOTは/ srcフォルダーがある場所です)

エクリプス

xxxx.propertiesファイルがプロジェクトのROOT自体にある場合、Eclipseは満足しています。

したがって、IntelliJは、このように参照されると、.propertiesファイルがEclipseよりも1レベル高いと想定します。

これは、エクスポートした.jarに同じコード行(new FileInputStream( "xxxx.properties");)がある場合にコードを実行する方法にも影響します。俊敏になりたい、jarと.propertiesファイルをパッケージ化したくない場合は、コマンドラインから.propertiesファイルを正しく参照するために、以下のようにjarを実行する必要があります。

INTELLIJ EXPORTED JAR

java -cp "/path/to_properties_file/:/path/to_jar/some.jar" com.bla.blabla.ClassContainingMainMethod

ECLIPSE EXPORTED JAR

java -jar some.jar

Eclipseでエクスポートされた実行可能jarは、参照される.propertiesファイルが.jarファイルがある場所と同じ場所にあることを期待します。


はい、logging.propertiesは、log4j2.xmlやlog4j.propertiesとは異なり、IntelliJモジュールのルートにある必要があります。また、正常に機能するLog4jとは異なり、IntelliJ内で実行するにはまだ陪審が必要であることがわかりました(Eclipseも同じで、これはJavaロギングの障害です)。stackoverflow.com/ questions / 960099 /…を参照してください。代わりの方法の1つは、実行/デバッグ構成を-Djava.util.logging.config.file =で修正することです。これは、コードまたは予期されたプロパティファイルに構成が必要であるため、かなり不便です。
Russ Bateman

1

質問はすでに回答されているので、おそらくこれは少し話題から外れていますが、同様の問題が発生しました。私の場合、コンパイル時に単体テストリソースの一部のみが出力フォルダーにコピーされました。私のpersistence.xmlの中にMETA-INFのフォルダはコピーされませんしまったが、何も

最後に、問題のあるファイルの名前を変更し、プロジェクトを再ビルドして、ファイル名を元の名前に戻すことで、問題を「解決」しました。これがうまくいった理由を私に尋ねないでください。私の推測では、どういうわけか、私のIntelliJプロジェクトはファイルシステムと少し同期がとれておらず、名前の変更操作によって、ある種の内部「リソース再スキャン」がトリガーされました。


1

これは、私が行った間抜けな間違いの1つです。私はこの問題のデバッグに多くの時間を費やし、上記に投稿されたすべての応答を試しましたが、結局、それは私の多くの愚かな間違いの1つでした。

私が使っていたorg.apache.logging.log4j.Logger(:FMLを:)私が使用している必要があります一方org.apache.log4j.Logger。この正しいロガーを使用することで、私の夜が救われました。


0

単体テストのlog4j.xmlファイルに同様の問題があり、上記のすべてを行いました。しかし、それは、失敗したテストのみを再実行していたためであることがわかりました。テストクラス全体を再実行すると、正しいファイルが取得されます。これはIntelli-j 9.0.4の下にあります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.