After followed the official documentation and others tutorials, when I run my quarkus 3.6.4 app I get the error:
2024-01-12 10:02:11,412 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (executor-thread-1) HTTP Request to /hello?name=max failed, error id: 1dac2036-f070-415a-9ef4-cad4ebfdbed7-1: java.lang.RuntimeException: Error injecting freemarker.template.Template org.acme.HelloResource.hello
at org.acme.HelloResource_Bean.doCreate(Unknown Source)
at org.acme.HelloResource_Bean.create(Unknown Source)
at org.acme.HelloResource_Bean.create(Unknown Source)
at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:117)
at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:41)
at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:38)
at io.quarkus.arc.impl.LazyValue.get(LazyValue.java:32)
at io.quarkus.arc.impl.ComputingCache.computeIfAbsent(ComputingCache.java:69)
at ...
Caused by: jakarta.enterprise.inject.CreationException: freemarker.template.TemplateNotFoundException: Template not found for name "hello.ftl".
The name was interpreted by this TemplateLoader: MultiTemplateLoader(loader1 = ClassTemplateLoader(classLoader="QuarkusClassLoader:Quarkus Runtime ClassLoader: DEV for caronte-1.0.0-SNAPSHOT restart no:0@6de0f580", basePackagePath="freemarker/templates/")).
at io.quarkiverse.freemarker.runtime.FreemarkerTemplateProducer_ProducerMethod_getTemplate_l8tBZCOFgJ9DySmRlLH9CkgP6Lw_Bean.create(Unknown Source)
at io.quarkiverse.freemarker.runtime.FreemarkerTemplateProducer_ProducerMethod_getTemplate_l8tBZCOFgJ9DySmRlLH9CkgP6Lw_Bean.get(Unknown Source)
at io.quarkiverse.freemarker.runtime.FreemarkerTemplateProducer_ProducerMethod_getTemplate_l8tBZCOFgJ9DySmRlLH9CkgP6Lw_Bean.get(Unknown Source)
at io.quarkus.arc.impl.CurrentInjectionPointProvider.get(CurrentInjectionPointProvider.java:48)
... 29 more
Caused by: freemarker.template.TemplateNotFoundException: Template not found for name "hello.ftl".
The name was interpreted by this TemplateLoader: MultiTemplateLoader(loader1 = ClassTemplateLoader(classLoader="QuarkusClassLoader:Quarkus Runtime ClassLoader: DEV for xxx-1.0.0-SNAPSHOT restart no:0@6de0f580", basePackagePath="freemarker/templates/")).
at freemarker.template.Configuration.getTemplate(Configuration.java:2957)
at freemarker.template.Configuration.getTemplate(Configuration.java:2759)
My pom.xml:
...
<properties>
<compiler-plugin.version>3.11.0</compiler-plugin.version>
<maven.compiler.release>21</maven.compiler.release>
<quarkus.platform.version>3.6.4</quarkus.platform.version>
<skipITs>true</skipITs>
<surefire-plugin.version>3.1.2</surefire-plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-arc</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-reactive</artifactId>
</dependency>
<dependency>
<groupId>io.quarkiverse.freemarker</groupId>
<artifactId>quarkus-freemarker</artifactId>
<version>1.0.0</version>
</dependency>
...
</dependencies>
...
My controller:
@Path("hello")
public class HelloResource {
@Inject
@TemplatePath("hello.ftl")
Template hello;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello(@QueryParam("name") String name) throws IOException, TemplateException {
StringWriter stringWriter = new StringWriter();
hello.process(Map.of("name", name), stringWriter);
return stringWriter.toString();
}
}
My /src/main/resources/freemarker/templates/hello.ftl:
Hello ${name}!
I run my application with this command: mvnw quarkus:dev
I can't figure out what I'm wrong. How can I solve this issue?