У меня есть программа java, которая считывает ресурсы изображений с диска.
Это хорошо работает при тестировании с mvn exec:java
.
Однако, когда программа упакована с mvn packaged
, выдает следующую ошибку:
java .nio.file.FileSystemNotFoundException
Структура проекта
├── java
│ └── com
│ ├── aaa
│ │ ├── bbb
│ │ │ ├── AssemblingTags.java
│ │ │ ├── BatchLifeCycle.java
│ │ │ ├── config
│ │ │ │ ├── AssemblingTagsConfig.java
│ │ │ │ ├── Configuration.java
│ │ │ │ ├── DatabaseConfig.java
│ │ │ │ ├── ExecutionContext.java
│ │ │ │ ├── InjectionTagsConfig.java
│ │ │ │ ├── QualityConfig.java
│ │ │ │ └── TraceabilityContext.java
│ │ │ ├── Database.java
│ │ │ ├── DeviceLifeCycle.java
│ │ │ ├── Devices.java
│ │ │ ├── InjectionTags.java
│ │ │ ├── QRCode.java
│ │ │ ├── Quality.java
│ │ │ ├── Simulator.java
│ │ │ ├── ThreadManager.java
│ │ │ ├── TimeManager.java
│ │ │ └── Utils.java
│ │ └── traceability
│ │ └── Tracer.java
│ └── example
│ ├── AdminAPI.java
│ ├── ConfigAPI.java
│ ├── CORSFilter.java
│ ├── DeviceAPI.java
│ ├── Main.java
│ ├── QrCodeAPI.java
│ ├── ToggleAPI.java
│ └── TracerAPI.java
└── resources
└── images
└── strioscopy
├── v1-2.png
├── v1-3.png
├── v2-1.png
└── v2-2.png
Кусок кода, который читает изображение
Обратите внимание на отпечатки.
try {
System.out.println("images/" + type + "/" + name); <-- PRINT 1
URL res = getClass().getClassLoader().getResource("images/" + type + "/" + name);
System.out.println(res); <-- PRINT 2
File file = Paths.get(res.toURI()).toFile();
FileInputStream fis = new FileInputStream(file);
byte[] data = new byte[(int) file.length()];
fis.read(data);
fis.close();
return Response.ok(data).build();
} catch (Exception e) {
e.printStackTrace();
return Response.serverError().entity(e).build();
}
При использовании mvn exec:java
работает и выведите:
images/strioscopy/v1-3.png
file:/home/hduser/program/target/classes/images/strioscopy/v1-3.png
При выполнении с помощью jar (java -jar myprogram-jar-with-dependencies.jar
) происходит сбой и выводится:
images/strioscopy/v1-3.png
jar:file:/home/hduser/program/target/myprogram-jar-with-dependencies.jar!/images/strioscopy/v1-3.png
Насколько я понимаю, он не может прочитать изображения из банки (как это «Джаред»). Но как решить эту проблему?
Более того, обратите внимание на восклицательный знак: (между шевронами) jar:file:/home/hduser/program/target/myprogram-jar-with-dependencies.jar>>!<</images/strioscopy/v1-3.png
Это нормально?