Почему Fantom не может найти ресурс в банке?
Я недавно начал использовать Fantom. У меня есть файл JAR, который содержит ресурс (в данном случае svg изображение). Я могу использовать классы из jar просто отлично, но ресурс не загружается: Thread.currentThread().getContextClassLoader().getResourceAsStream("name")
возвращается null
, Когда я использую тот же самый jar в контексте только Java, он может найти ресурс просто отлично.
Любые предложения о том, как отладить или даже решить эту проблему, будут высоко оценены.
4 ответа
Неправильная часть Thread.currentThread().getContextClassLoader()
Джава: AnyClassFromJar.class.getClassLoader()
работает
Фантом: Class.forName("AnyClassFromJar").getClassLoader()
должно сработать
Это должно быть в банке? Если вы вставите его прямо в ваш Pod, вы можете использовать файлы доступа, например так:
file := Pod.find("myPod").file(`/path/to/file.ext`)
Попробуйте "/ имя" вместо "имя". Это работает для меня (на Java).
Если я правильно помню, .jar
файлы не могут быть доступны для ресурсов, но так как .jar
файлы - не что иное, как файлы Zip с необычным расширением, вы можете открыть их вот так.
Вот моя структура папок для примера (но подойдет любая структура).
ExampleDir
|
+--- TestZip.fan
+--- testOpen.jar
|
+--- META-INF
| +--- email.png
| ...
|...
И вы открываете testOpen.jar
как это:
class TestZip
{
static Void main(Str[] args)
{
jar := Zip.open(File(`testOpen.jar`))
png := jar.contents[`/META-INF/email.png`].readAllBuf
jar.close
}
}
РЕДАКТИРОВАТЬ: Обсуждение этого на досках Fantom кажется, что этот пример должен работать.
buff := Interop.toFan(Class.forName("net.testOpen.Foo").getClassLoader().getResourceAsStream("email.png")),4096)