[Java/Maven] mismatch waar jar en IDE een resource zoekt

Pagina: 1
Acties:

Vraag


  • MisterE
  • Registratie: April 2002
  • Laatst online: 20:22
Mijn vraag
Ik probeer te achterhalen hoe ik met interne resources hoor om te gaan met Java. Het werkt nu in mijn IDE of als jar. Maar het moet natuurlijk in alle gevallen werken.

In mijn echte project gaat het mis, maar ik kan het naspelen.

Relevante software en hardware die ik gebruik
Eclipse vanuit een Flatpack

Wat ik al gevonden of geprobeerd heb


File -> New -> Maven Project

Create a simple project

Use default Workspace location


Group Id: ExampleGroup

Artifact Id: ExampleId

We voegen plaatje toe aan "src/main/resources" map in de IDE

Maken een Class aan met Name: ExampleClass
Java:
1
2
3
4
5
public class ExampleClass {
    public static void main(String[] args) throws Exception {
        System.out.println(ExampleClass.class.getClassLoader().getResourceAsStream("test.jpg").available());
    }
}
Nou runnen we die als "java application". Het resultaat is 1492534.
Nou exporteren we deze als Jar:

File -> Export -> Runnable JAR file

Launch configuration: ExampleClass - ExampleID

Export destination: example.jar

Library handling: Copy required libraries into a sub-folder next to the generated JAR
java -jar example.jar
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.io.InputStream.available()" because the return value of "java.lang.ClassLoader.getResourceAsStream(String)" is null
Als ik de example.jar open in Ark dan zie ik dat het bestand staat in /resources/test.jpg.

Als ik de code aanpas naar "getResourceAsStream("resources/test.jpg")" en exporteer dan werkt het via de command line, maar dan faalt het weer in de IDE.