2017-03-21 11 views
0

私は自分自身のバックエンドを書いて、アーティファクト(依存関係)に変換しました。依存関係には3つの.jsonファイルが含まれています。依存関係内のJsonファイルが見つかりませんでした

java.io.FileNotFoundException: C:\Users\Yasin\Desktop\LeagueLookup\data\deps\resources\masteries.json (The system can not find the path specified) 
    at java.io.FileInputStream.open0(Native Method) 
    at java.io.FileInputStream.open(FileInputStream.java:195) 
    at java.io.FileInputStream.<init>(FileInputStream.java:138) 
:私は別のプロジェクトにライブラリとして依存関係を追加しようとしているときに、このメッセージがスローされている(アクセス方法などに)、今

/resources/ 
/com/ 
/META-INF/ 

:それは、ディレクトリツリーは次のようであるのです

これは、依存関係内のコードです:私は依存関係

内PROJECT_ROOT_DIRパスをSYSOUTとき

public static String PROJECT_ROOT_DIR = new File(Config.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getParent(); 

public static String RESOURCES = PROJECT_ROOT_DIR + "/resources/"; 

public static File MASTERIES = new File(RESOURCES + "masteries.json"); 

これが結果です

C:\Users\Yasin\Desktop\Riot-API\out\production 

バックエンドでクラスを作成してコードを実行すると、すべてが正常に動作しますが、別のプロジェクトでその依存関係を使用しようとするとすべてがうんざりします。私もそれはそれで作業していた

は、実際のパス

それはこのように見えたのです。

C:\Users\Yasin\Desktop\LeagueLookup\data\deps\main.jar\resources\masteries.json 

が、それは(私はInputStreamを使用することをどこかで読んaswell機能しなかった、ということを試みたが、それ 私の目標: 私はAPIに自分のデータを使用したいと思っています。私は自分のソースではなく別のソースからデータを取得したくありません。

は、あなたが私に役立つことを願って

+0

誰も私にこれを手伝ってもらえませんか? – Sh0ck

+0

他の人があなたの問題を理解するのに時間がかかることがあります;)私たちの助けを借りて返すことはありません – FibreFoX

+0

どうもありがとうxDありがとうございました – Sh0ck

答えて

1

のjava-アプリケーションが構築されている方法をあなたは誤解しているかもしれません。

Javaアプリケーション(ほとんどの場合)を書くと、どこでも実行されるJARファイルが作成されます。生成されたJARファイルの中に保存されているファイルにアクセスする必要がある場合は、いくつかのInputStreamを持つことができます(mavenやgradleのようなものを使用してください)。 Config.class.getProtectionDomain().getCodeSource().getLocation().getPath()による処理は間違っています。ソースコードに関する情報がコンパイルされた.classファイルから削除される可能性があり、特にアプリケーションの共有/出荷時に異なる場合があります。

あなたのjarファイル内のいくつかの保存されたファイルのいくつかのInputStreamを持つために、あなたはこの使用してい:「リソース」は瓶内部のデフォルト構造ではないとして、あなたはダブルする必要があるかもしれません

ClassLoader.getSystemClassLoader().getResourceAsStream("resources/masteries.json") 

をjarファイルの内容を確認してください。

+0

これは私が必要なものです。私はちょっと間違ったクラスローダーを使ったと思います(ClassLoader#getSystemClassLoaderのように、ルートディレクトリのリソースの検索をサポートしているようです)。だから私が他の試みでやった間違いは間違ったクラスを使っていた。ご親切にありがとうございました。 – Sh0ck

+0

'Config.class.getClassLoader()。getResourceAsStream(" masteries.json ")'を使用する場合、ファイルはConfigクラスと同じパッケージに含まれている必要があります。 – FibreFoX

+0

私はちょっと知っていましたが、パスを編集してjarファイル内のルートディレクトリに移動する方法がわかりませんでした。とにかくありがとうございます!!!! – Sh0ck

関連する問題