内のファイルを見つけることができません、彼らはすべての依存関係を含めるので、私は瓶の中にクラスローダとFileInputStreamのは、私はMavenのと私のjarファイルを構築していますJAR
のjava -jar
を経由してjarファイルを実行することができます私は、アプリケーション構成であるconfig.jsonを持っています。
/> jar tf cloudimport-0.1-jar-with-dependencies.jar | grep config.json
config.json
しかし、私は、アプリケーションを実行すると、それはconfig.json見つけることができません:
ClassLoader classLoader = getClass().getClassLoader();
System.out.println(classLoader.getResource("config.json"));
File configFile = new File(classLoader.getResource(fileName).getFile());
(Exception thrown here ->) FileReader fileReader = new FileReader(configFile);
BufferedReader br = new BufferedReader(fileReader);
が生成する:
java -jar cloudimport-0.1-jar-with-dependencies.jar
jar:file:/home/ubuntu/cloudimport-0.1-jar-with-dependencies.jar!/config.json
java.io.FileNotFoundException: file:/home/ubuntu/cloudimport-0.1-jar-with-dependencies.jar!/config.json (No such file or directory)
を 私はconfig.jsonは、瓶の内側に実際にある検証しました
上記のコードを実行するクラスは、jarファイルにあります。
com.test.cloudsync.config.AppConfig.class
WindowsでintelliJからアプリケーションを実行すると正しく動作しますが、intelliJから実行すると、メインクラスがjarでなく実行されます。
私はすでに、この検索が、のような回答をしている:提案はExcpetionがthrowedていなかったということでしたEDIT // What is the difference between Class.getResource() and ClassLoader.getResource()?
が助けにはならなかった...
ClassLoaderによって - これは本当です。私はいくつかのものを削除したので、スコープを制限することができました。問題はFileINputStreamを開こうとしているようですが、ファイルがjarファイルであるかどうかはわかりません。
のフルスタックトレース
:/> java -jar java_cloudsync/com/tsg/cloudimport/cloudimport/0.1/cloudimport-0.1-jar-with-dependencies.jar
jar:file:/home/ubuntu/java_cloudsync/com/tsg/cloudimport/cloudimport/0.1/cloudimport-0.1-jar-with-dependencies.jar!/config.json
java.io.FileNotFoundException: file:/home/ubuntu/java_cloudsync/com/tsg/cloudimport/cloudimport/0.1/cloudimport-0.1-jar-with-dependencies.jar!/config.json (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileReader.<init>(FileReader.java:72)
at com.tsg.cloudsync.config.AppConfig.readConfigFile(AppConfig.java:33)
at com.tsg.cloudsync.config.AppConfig.<init>(AppConfig.java:23)
at com.tsg.cloudsync.awsutils.SQSSocket.<init>(SQSSocket.java:34)
at com.tsg.cloudsync.awsutils.SQSSocket.<clinit>(SQSSocket.java:19)
at com.tsg.cloudsync.NewFileWatchDog.main(NewFileWatchDog.java:24)
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.tsg.cloudsync.NewFileWatchDog.main(NewFileWatchDog.java:24)
Caused by: java.lang.NullPointerException
at com.tsg.cloudsync.config.AppConfig.getAWSCredentials(AppConfig.java:50)
at com.tsg.cloudsync.awsutils.SQSSocket.<init>(SQSSocket.java:35)
at com.tsg.cloudsync.awsutils.SQSSocket.<clinit>(SQSSocket.java:19)
... 1 more
'getResource("/config.json ")'を試してください - 'リソース名の前に'/'を書きます –
' java.io.FileNotFoundException'で失敗したコードを投稿できますか? 'System.out.println(classLoader.getResource(" config.json "))によって出力される行' jar:file:/home/ubuntu/cloudimport-0.1-jar-with-dependencies.jar!/ config.json'に基づいて、 )あなたはファイルが見つかることを自分自身で証明しました。 – SubOptimal
私はいくつかのものを取り除き、例外を制限することができました。それはファイルが私が推測する瓶の中にあるので、入力ストリームが読み取れないようですね? –