web-dev-qa-db-ja.com

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

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

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

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

IntelliJ 8を使用すると、酔っ払った猿のように推測し、最終的には動作するようになりました。私は今9を持っています、そして、私は完全に失敗しています。私は1時間やってみました。 「クラスパスに追加」オプションはどうですか?/fume/vent/rant

115
Tony Ennis

これを試して:

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

実際には、少なくとも2つの方法があります。最初の方法はColinDによって説明されています。IDEAで「リソース」フォルダーを「ソース」フォルダーとして設定するだけです。 Resource Patternsにリソースの拡張子が含まれている場合、Makeを実行すると、出力ディレクトリにコピーされます。プロジェクトと出力ディレクトリは自動的にアプリケーションのクラスパスになります。

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

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

異なるlog4j構成でテストする場合は、Run/Debug configurationVM parametersファイルでカスタム構成ファイルを直接指定する方が簡単な場合があります。

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

47
CrazyCoder

私には同じ問題があり、それは私を非常に困らせます!!

私は答え2としてやるべきだといつも思っていました。それはIntellij 9(現在は10を使用)で機能していました。

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

<build>
  ...
  <resources>
    <resource>
      <directory>src/main/resources</directory>
    </resource>
  </resources>
  ...
</build>
39
Peter Thygesen

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

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

enter image description here

16
Julius

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

13
prototype

ScalaとSBTで同じ問題が発生した場合:

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

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

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

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

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

  • SBT構成でコードを実行すると、log4j.propertiesファイルが見つかりました。

enter image description here

4
user2361174

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を実行する必要があります。

INTELLIJエクスポートJAR

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

EclipseエクスポートJAR

Java -jar some.jar

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

2
DataHacker

たぶん、これは少し質問から外れており、質問がすでに回答されているように見えますが、私は同様の問題を経験しました。私の場合、コンパイル時に単体テストリソースのsomeのみが出力フォルダーにコピーされました。私のpersistence.xmlMETA-INFフォルダーにコピーされましたbut else else.

最後に、問題のあるファイルの名前を変更し、プロジェクトを再構築し、ファイル名を元の名前に戻すことで、問題を「解決」しました。なぜこれが機能したのか聞かないでください。私の最良の推測は、どういうわけか、私のIntelliJプロジェクトがファイルシステムと少し同期しなくなり、名前変更操作が何らかの内部「リソース再スキャン」をトリガーしたことです。

1
user1426162

ユニットテストのlog4j.xmlファイルで同様の問題が発生しました。上記のすべてを実行しました。しかし、失敗したテストを再実行するだけだったためだとわかりました。..テストクラス全体を再実行すると、正しいファイルが選択されます。これはIntelli-j 9.0.4の下にあります

0
James B

私は愚かな人だと知っているので、長い一日を過ごした後、この問題をデバッグするために多くの時間を費やし、上記のすべての応答を試しましたが、結局、それは私の多くの愚かな間違いの1つでした。

org.Apache.logging.log4j.Logger(:fml :)を使用していましたが、org.Apache.log4j.Loggerを使用する必要がありました。この正しいロガーを使用すると、命が救われました。

0
avp