Difference from running application in IntellJ and running JAR file

Tags: , , ,



I came across a situation when i would run application in intellJ and everything runs smoothly , then i would create a jar using maven install command and try running it manually from command line, the results are the following :

Command Line

java.lang.RuntimeException: java.io.FileNotFoundException: apisrcmainresourcesFAQ.pdf (The system cannot find the path specified)
        at test.test.paisy.test.test.domain.email.FaqAttachment.pdfToBytes(FaqAttachment.java:27) ~[classes!/:0.0.1-SNAPSHOT]

Questions:

  1. What is the difference between running Jar and running App in IntelliJ
  2. Why would it complain about file path when it finds it successfully by running it in ItelliJ

Path to file

try (FileInputStream inputStream = new FileInputStream(new File("api/src/main/resources/FAQ.pdf"))) {
                this.bytes = ByteStreams.toByteArray(inputStream);

Thank you

Answer

First of all, if you want to use relative path, it needs to be started from the src folder, like this

new File("src/main/resources/FAQ.pdf")

But the best way is to use

InputStream inputStream = ClassName.class.getClassLoader().getResourceAsStream("FAQ.pdf"); 

So that the path won’t be relative to that static path.

Don’t forget to replace ClassName with the name of your current class

Make sure to clean the build and then rebuild before running.

For more detail take a look at this answer



Source: stackoverflow