2017-11-13 9 views
0

resというラベルのフォルダからグラフィックスとサウンドエフェクトを読み込むプロジェクトがあります。このフォルダは、srcフォルダと同じディレクトリレベルにあります。リソースルートとしてマークされているresがあります。IntelliJ IDEAのJAR成果物にリソースフォルダを正しく含めるにはどうすればよいですか?

私は プロジェクトの構造を経由してコンテンツディレクトリとして解像度が含まれるように、私のアーティファクトを設定し - >アーティファクト - >追加(Altキー+挿入) - > JAR

を次に、出力レイアウト]タブでは、私が押されましたドロップダウンボックスを追加 - >ディレクトリの内容 - > res

私はIntellijでプロジェクトを実行すると、リソースがうまく見つかりました。ここで私はリソースにアクセスする方法を示すコードスニペットです:

public static final Sfx VOID_SOUND = new Sfx(TinySound.loadSound(new File("res/audio/sfx/void_sound.wav"))); 

私は、スタンドアロンのアーティファクトをビルドするときしかし、その後、jarファイルを実行し、それはファイルパスに私のマシンの親ディレクトリを付加することで、リソースを探します、ルートに至るまで。

/home/user/Demo/res/audio/sfx/void_sound.wav (No such file or directory) 
Error getting resource stream! 

適切な場所にアーチファクトビルドを設定する方法はありますか? jarファイルの中に含まれるリソースを必要とするので、外部依存関係のないスタンドアロンのjarとして機能します。

答えて

0

私はLinuxに精通していませんので、塩の穀物でこれを取ってください。しかし、私には、許可がない場所からファイルにアクセスしようとしているように見えます。ファイルやディレクトリを共有する場所に移動しようとしましたか?

+0

私のユーザーアカウントのホームディレクトリにあるので、そのディレクトリには絶対にアクセス許可があります。私のアカウントはこのマシンのroot以外の唯一のアカウントですので、共有されている場所に最も近いアカウントです。パーミッションを持つことができない唯一の方法は、ルートのみのパーミッションでマークされたディレクトリにあるかどうかです。 – DayTripperID

0

モジュールのContent rootにあるresource/source foldersのすべてのファイルは、artifact buildのアーティファクトに含まれています。作成されたアーティファクトのコンテンツを調べることができます(アーティファクトは、Generat Settingsの出力フィールドの出力ディレクトリに格納されています)。

ファイルの正しいディレクトリを指定していることを確認してください。例えば。 resフォルダがモジュールのresource rootとしてマークされている場合、成果物内のファイルパス名は、resディレクトリ内のサブフォルダ、つまりaudio/sfx/void_sound.wavから開始されます。

0

今、私はそれが動作しない理由を理解します。これは、JAR成果物に含まれるリソースをクラスパスに含める必要があり、getResource()を使用してアクセスできるためです。クラスパス外のリソースは、ファイルパスを使用してアクセスする必要があります。相対パスを使用すると、JARがJARの内部ではなく、起動されるpwdの場所に解決されます。解決方法は、リソースをクラスパスに入れて、getClass().getResource()またはgetClass().getLoader().getResource()を使用してアクセスすることです。

関連する問題