SparkJava: index.hbs FileNotFoundException - PullRequest
       6

SparkJava: index.hbs FileNotFoundException

0 голосов
/ 22 сентября 2018

Я разработал веб-приложение со структурой SparkJava.Приложение работает нормально, когда я запускаю его из Eclipse.Когда я упаковываю его в файл JAR, запускаю файл JAR и открываю веб-приложение в браузере, я получаю Внутреннюю ошибку 500.

Консоль возвращает исключение FileNotFoundException.Файл hbs находится в каталоге src / main / resources / templates.

org.eclipse.jetty.io.RuntimeIOException: java.io.FileNotFoundException: /templates/index.hbs
    at spark.template.handlebars.HandlebarsTemplateEngine.render(HandlebarsTemplateEngine.java:78) ~[jar:rsrc:spark-template-handlebars-2.7.1.jar!/:?]
    at App.lambda$0(App.java:42) ~[rsrc:./:?]
    at spark.SparkBase$1.handle(SparkBase.java:264) ~[jar:rsrc:spark-core-2.1.jar!/:?]
    at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:154) [jar:rsrc:spark-core-2.1.jar!/:?]
    at spark.webserver.JettyHandler.doHandle(JettyHandler.java:60) [jar:rsrc:spark-core-2.1.jar!/:?]
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:179) [jar:rsrc:jetty-server-9.0.2.v20130417.jar!/:?]
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136) [jar:rsrc:jetty-server-9.0.2.v20130417.jar!/:?]
    at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52) [jar:rsrc:jetty-server-9.0.2.v20130417.jar!/:?]
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jar:rsrc:jetty-server-9.0.2.v20130417.jar!/:?]
    at org.eclipse.jetty.server.Server.handle(Server.java:451) [jar:rsrc:jetty-server-9.0.2.v20130417.jar!/:?]
    at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:252) [jar:rsrc:jetty-server-9.0.2.v20130417.jar!/:?]
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:266) [jar:rsrc:jetty-server-9.0.2.v20130417.jar!/:?]
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:240) [jar:rsrc:jetty-io-9.0.2.v20130417.jar!/:?]
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:596) [jar:rsrc:jetty-util-9.0.2.v20130417.jar!/:?]
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:527) [jar:rsrc:jetty-util-9.0.2.v20130417.jar!/:?]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
Caused by: java.io.FileNotFoundException: /templates/index.hbs
    at com.github.jknack.handlebars.io.URLTemplateLoader.sourceAt(URLTemplateLoader.java:70) ~[jar:rsrc:handlebars-4.0.6.jar!/:?]
    at com.github.jknack.handlebars.Handlebars.compile(Handlebars.java:357) ~[jar:rsrc:handlebars-4.0.6.jar!/:?]
    at com.github.jknack.handlebars.Handlebars.compile(Handlebars.java:343) ~[jar:rsrc:handlebars-4.0.6.jar!/:?]
    at spark.template.handlebars.HandlebarsTemplateEngine.render(HandlebarsTemplateEngine.java:75) ~[jar:rsrc:spark-template-handlebars-2.7.1.jar!/:?]

Что я не понимаю, почему это работает, когда я запускаю его в Eclipse, а не когда я упаковываю его в банку.

Есть идеи, в чем может быть проблема?

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Я решил проблему самостоятельно.Проблема была с Eclipse.Поскольку это может быть полезно для других, у которых есть такая же проблема, я сам создаю ответ.

Проблема была вызвана тем, что папка / src / main / resource была включена в путь сборки Java,но по какой-то причине не все подпапки были включены.Значение "**" было присвоено элементу " Исключено: ".После того как я изменил значение на «(Нет)», файлы шаблонов были найдены.

Solution is to assign value (None) to *Excluded* item

0 голосов
/ 22 сентября 2018

URLTemplateLoader.sourceAt () выбрасывает это, потому что getResource () возвращает ноль, вот код:

  protected URL getResource(final String location) throws IOException {
    File file = new File(location);
    return file.exists() ? file.toURI().toURL() : null;
  }

Вы передаете относительный путь конструктору файла, и он разрешен из рабочего каталога.

Путь, абстрактный или в виде строки, может быть абсолютным или относительным.Абсолютный путь завершен в том смысле, что никакая другая информация не требуется для определения местоположения файла, который он обозначает.Относительный путь, напротив, должен интерпретироваться в терминах информации, взятой из другого пути.По умолчанию классы в пакете java.io всегда разрешают относительные пути к текущему пользовательскому каталогу.Этот каталог называется системным свойством user.dir и обычно является каталогом, в который была вызвана виртуальная машина Java.

Файл javadoc

...