質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spark

Spark(Apache Spark)とは、膨大なデータを迅速、柔軟に分散並行処理を行うフレームワークです。分析ツールであるApache Hadoopと比較し、最大で100倍の速度でデータ処理ができるとされています。

Q&A

解決済

1回答

2516閲覧

HerokuにJAVAのSPARKを使用した時のFreeMarkerのテンプレートパスの設定方法

oropatajin

総合スコア8

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spark

Spark(Apache Spark)とは、膨大なデータを迅速、柔軟に分散並行処理を行うフレームワークです。分析ツールであるApache Hadoopと比較し、最大で100倍の速度でデータ処理ができるとされています。

0グッド

0クリップ

投稿2016/08/23 11:30

###前提・実現したいこと
HerokuでJAVAのWEBアプリを構築中です。
WEBフレームワークはSPARKを使用していおり、
画面のテンプレートとして、FreeMarkerを使用したいと思っています。
しかしFreeMarkerのテンプレートがローカルでは読み込めるのですが、
Heroku上ではうまく読み込めず困っています。

###発生している問題・エラーメッセージ
以下のようなエラーが出力されます。

java.lang.IllegalArgumentException: java.io.FileNotFoundException: Template home.ftl not found. at spark.template.freemarker.FreeMarkerEngine.render(FreeMarkerEngine.java:74) at spark.TemplateViewRouteImpl$1.render(TemplateViewRouteImpl.java:61) at spark.TemplateViewRouteImpl$1.render(TemplateViewRouteImpl.java:58) at spark.TemplateViewRouteImpl.render(TemplateViewRouteImpl.java:85) at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:164) at spark.webserver.JettyHandler.doHandle(JettyHandler.java:61) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119) at org.eclipse.jetty.server.Server.handle(Server.java:517) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:302) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:245) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.execute(ExecuteProduceConsume.java:101) at org.eclipse.jetty.io.ManagedSelector.run(ManagedSelector.java:136) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572) at java.lang.Thread.run(Thread.java:745) Caused by: java.io.FileNotFoundException: Template home.ftl not found. at freemarker.template.Configuration.getTemplate(Configuration.java:580) at freemarker.template.Configuration.getTemplate(Configuration.java:543) at spark.template.freemarker.FreeMarkerEngine.render(FreeMarkerEngine.java:69)

###該当のソースコード

JAVA

1public static void main(String[] args) { 2 try { 3 Configuration conf = new Configuration(); 4 conf.setClassForTemplateLoading(Main.class, "/resources/template"); 5 get("/", (request, response) -> { 6 Map<String, Object> attributes = new HashMap<>(); 7 attributes.put("message", "Hello World!"); 8 return new ModelAndView(attributes, "home.ftl"); 9 }, new FreeMarkerEngine(conf)); 10 11 } catch (Exception e) { 12 log.error(ExceptionUtils.getStackTrace(e)); 13 } 14} 15

###試したこと
相対パスだとダメかと思い、"/resources/template"の部分を絶対パスを指定してみましたが、
ダメでした。
またresourcesの場所を
src/resourcesからsrc/main/resourcesなどに変更したりしてもダメでした。

###補足情報(言語/FW/ツール等のバージョンなど)
フォルダ構成は以下になります。

ルート ├─bin ├─build └─src ├─main └─resources ├─pub └─template

ビルドツールはgradleを使っており、build.gradleは以下になります。

def defaultEncoding = 'UTF-8' tasks.withType(AbstractCompile) each { it.options.encoding = defaultEncoding } apply plugin: 'java' apply plugin: 'war' apply plugin: 'jetty' apply plugin: 'eclipse-wtp' apply plugin: 'application' sourceCompatibility = 1.8 targetCompatibility = 1.8 version = '1.0' jar { manifest { attributes 'Implementation-Title': 'application', 'Implementation-Version': version } } mainClassName = 'main.Main' repositories { mavenCentral() maven { url "http://gitblit.github.io/iciql/maven/" } } sourceSets { main { java.srcDirs "src", "gen" output.classesDir = "bin/classes" } } dependencies { compile group: 'commons-collections', name: 'commons-collections', version: '3.2' testCompile group: 'junit', name: 'junit', version: '4.+' compile 'org.projectlombok:lombok:1.16.6' compile 'com.sparkjava:spark-core:2.3' compile 'com.sparkjava:spark-template-freemarker:2.3' compile 'com.gitblit.iciql:iciql:2.1.1' compile "com.heroku.sdk:heroku-jdbc:0.1.1" compile "org.postgresql:postgresql:9.4-1201-jdbc4" compile 'org.apache.commons:commons-dbcp2:2.1' compile 'net.arnx:jsonic:1.3.10' compile 'javax.servlet:javax.servlet-api:3.1.0' compile 'javax.mail:mail:1.4.7' compile 'org.apache.commons:commons-lang3:3.4' compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.5' compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.5' compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.3.2' } test { systemProperties 'property': 'value' } tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } //for heroku lines applicationName = "appname" defaultTasks = ['clean'] task stage(dependsOn: ['clean', 'installApp'])

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。
build.gradleのsourceSetsのmainに以下のようにリソースディレクトリを設定するとうまくいきました。

sourceSets { main { java.srcDirs "src", "gen" output.classesDir = "bin/classes" resources.srcDir "src" //この行を追加しました。 } }

投稿2016/08/23 12:53

oropatajin

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問