web-dev-qa-db-ja.com

IntelliJ for Mavenプロジェクトにリソースを追加する

私はこのようなプロジェクト構造を持っています:

src
 |-main
    |-Java
       |-com.abc.xyz
          |-Login.Java

これにリソースファイルを追加し、リソースを読み取る必要があります

InputStream is = getClass().getResourceAsStream("launchers.properties");

これはヌルを与えています。

Intellijでは、resourcesフォルダのsrc/mainの下に新しいパッケージを追加できないため、プロジェクト構造は次のようになります。 launchers.propertiesリソースファイルをプロジェクトに読み込むにはどうすればよいですか?

src
 |-main
    |-Java
       |-com.abc.xyz
          |-Login.Java
    |-resources
       |-com.abc.xyz
          |-Login
             |-launcher.properties

@mabaによって提案された解決策を試しましたが、まだ動作しません 

40
vikas

launcher.propertiesは、Loginというフォルダーの下にあるべきではありません。 src/main/resources/com/abc/xyzフォルダーに直接配置する必要があります。


私が言ったのと同じくらい簡単ですが、リソースフォルダーがソースフォルダーとしてマークされていない場合、これが問題になる可能性があります。

これが最初のクラスとセットアップです。

enter image description here

次に、resourcesフォルダーを作成します。

enter image description here

enter image description here

この新しく作成されたフォルダーは、ソースフォルダーとして自動的にマークされる必要があり、青色でマークされている場合はマークされています。それ以外の場合は、手動でマークする必要があります。

enter image description here

これで、パッケージを追加できるようになります。

enter image description here

enter image description here

そして今、あなたはそれにファイルを追加することができます:

enter image description here

enter image description here

また、アプリケーションを再実行しても、null値は返されません。

enter image description here

また、パッケージビューにはlaunchers.propertiesファイルも必ず表示されます。

enter image description here

62
maba

@mabaが指摘したように、コードが機能するためには、プロパティファイルはクラスと同じパッケージにある必要があります。

したがって、2つのファイルが必要です。

  • src/main/Java/com/abc/xyz/Login.Java
  • src/main/resources/com/abc/xyz/launcher.properties

IntelliJがリソースを表示しているかどうかは、質問の横にあります。行う必要があるのは、結果がターゲットのアーティファクトに含まれているかどうかを確認することです。

build all IntelliJで、作成したWAR/JAR/EARをお気に入りのZipビューアーで開き、「com/abc/xyz」フォルダーを参照します。両方のファイルが表示されます。

  • もしそうなら、あなたはあなたのコードで何か間違ったことをしている。タイプミス、特に末尾または先頭のドットとスペース(「launcher.properties [space]」など)を確認し、ファイル名をコピーして貼り付けて確認します
  • 存在しない場合、IntelliJのセットアップが間違っています。リソースはターゲットビルドに含まれません。 チュートリアルのオンライン IntelliJ ideaでこれを行う方法を確認してください。
3
boky

いいえ.....構造が間違っています。..resourcesの下に同じパッケージを作成しないでください。これはugくて適切ではありません:resourcesはリソース用であり、含むべきではありませんソースパッケージ。

ClassLoader.getResources(asStream)(path)メソッドを使用する場合、メソッドはクラスパスのルートから検索を開始するだけで、パス名は先頭文字として/で開始できません。あなたがしなければならないことは、IntelliJでresourcesresources folderとしてマークすることです。 resourcesの下のファイルはクラスパスの下にリストされ、あなたがしたようにそれらを簡単に使用できます。

(以前の回答では、このオプションは2013年にはまだ利用できません。あなたはmark as source folderしか持っていません。これまでのEclipseと同様に、「ソースフォルダーの追加」がありますが、2018年にはIntellijで利用できます:フォルダーをソース、リソース、テストソース、テストリソースとしてマークすると、それらすべてがクラスパスのルートに追加されます。

0
WesternGun

メニューからVMオプションで構成を実行/編集します-Dspring.config.location = path-fileを追加する必要があります

私はIntelliJで試しましたが、うまくいきます!

0
Sudabe-Neirizi

私は同じ問題を抱えていて、リソースファイルに気づきました。たとえば:my.propertiesは、ビルド発生後にtargetディレクトリ内の対応するモジュールフォルダーにコピーされません。それを解決するために、ビルドプロセス中にモジュールディレクトリからtargetディレクトリにリソースをコピーするようにMavenに指示する必要がありました。の中に .pom追加したファイル<resource>そのような要素:

<project ...>
    ...
    <build>
        ...
        <resource>
            <directory>src/main/Java/com/abc/xyz</directory>
            <targetPath>com/abc/xyz</targetPath>
        </resource>
    </build>
    ...
</project>

<directory>要素は、.pom file、つまりプロジェクトのルートディレクトリ、および<targetPath>要素は、スラッシュで区切られたパッケージ名を示します。

0
vivanov