Почему 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)
Другие вопросы по тегам